Laden...
M
Moma2023
myCSharp.de - Member
6
Themen
24
Beiträge
Letzte Aktivität
vor 10 Monaten
Dabei seit
10.10.2023
Erstellt vor 10 Monaten

Ah jetzt verstehe ich, danke für die Detailinfos. =))

Erstellt vor 10 Monaten

Das Problem ist, wenn ich die Software am Server hochlade, wird durch - using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain)) - ein Fehler ausgeworfen. (Es wird bereits ein User eines App-Pools verwendet, aber eben keiner vom AD)

=> Der Grund, warum ich an einen SSO User dachte ist, da ja dadurch der Windows User vom AD geladen wird und ich glaube, dass dies dann funktioniert.

Wie sollte es aus Sicht eines IT-Spezialisten wie dir in der Praxis gemacht werden?

Danke für die schnelle Rückmeldung. (:

Erstellt vor 10 Monaten

Liebe Community,

ich erstellte eine Web-Anwendung (ASP.NET Core 6.0) die auch betreut wird (IT Consulting). Aufgrund der unterschiedlichen Sichtbarkeit von Daten, je nach Arbeitsbereich, benötige ich WindowsUser-Daten wie z.B. auch beim Einloggen um dies festhalten zu können (funktioniert lokal beim Testen bereits super, nur am Server wird der Standarduser des AppPools verwendet)

            WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

            // Überprüfen, ob die Windows-Identität gültig ist
            if (windowsIdentity != null)
            {
                // Abrufen des Benutzernamens aus der Windows-Identität
                string userName = windowsIdentity.Name;

                // Konstruktion des PrincipalContext-Objekts für die Domäne
                using (PrincipalContext principalContext = new PrincipalContext(ContextType.Domain))
                {
                    // Finden des Benutzerprinzipals im Active Directory
                    UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(principalContext, IdentityType.SamAccountName, userName);

                    //Überprüfen, ob das Benutzerprinzipal - Objekt gefunden wurde
                    if (userPrincipal != null)
                    {
                        // Abrufen der E-Mail-Adresse des Benutzers aus dem Benutzerprinzipal                       
                        string userPrincipalName = userPrincipal.UserPrincipalName;

                        //Verwendung der E - Mail - Adresse des Benutzers
                        Login = "JA";
                    }

Aufgrund von Erfahrungen denke ich an einen Single-Sign-On User der meines Wissens nach (Infos vom ehemaligen Server-Admin) extra am IIS Server der Anwendung im APP-POOL erstellt wird und konfiguriert werden muss (Lässt das Zugreifen auf WindowsUser-Daten zu | Der App-Pool verwendet für die Applikation diesen SSO User | etc.)

Gibt es eine kleine Anleitung hierfür wie das Schritt für Schritt gemacht werden muss, auch ob ich ev. noch NuGet-Packeges installieren muss im VS.

Alle Infos die ich hierfür benötige sind wichtig.

Bitte um eure Hilfe, DANKE.

Freundliche Grüße

Erstellt vor 11 Monaten

DANKE für die schnelle Rückmeldung und der Info wie man dies professionell umsetzt. Werde mir die Links gleich mal durchsehen. 😃

Erstellt vor 11 Monaten

Guten Morgen,

ich habe derzeit folgendes umgesetzt. Mit dieser web.config Datei wird automatisch beim Starten dieser Web-Anwendung vom Browser ein kleines Fenster geöffnet, wo man sich zuvor anmelden muss.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <location path="." inheritInChildApplications="false">
        <system.webServer>
            <security>
                <authentication>
                    <anonymousAuthentication enabled="false" />
                    <windowsAuthentication enabled="true" />
                </authentication>
            </security>
        </system.webServer>
    </location>
</configuration>

Aufgrund einer entwickelten Login Seite will ich jetzt dieses Fenster nicht vor dieser Login Seite aufrufen, sondern mit dem Anmeldefenster "verknüpfen", Sodass durch [Authorized] vor jeder Klasse diese Anmeldung erforderlich ist um Daten sehen zu können. Dafür erstellte ich (Index.cshtml):

            <ul class="navbar-nav">
                @if (User.Identity?.IsAuthenticated == true && !(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development"))
                {
                    <li class="nav-item">
                        <span class="navbar-text text-dark">Hello @User.Identity?.Name!</span>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
                    </li>
                }
                else
                {
                    @Html.Partial("_LoginPartial")
                }
            </ul> 

und _LoginPartial (PartialView für das Formular):

@using System.Security.Principal
@model IndexModel
@using (Html.BeginForm("SignIn", "Index", FormMethod.Post, new { @class = "form-horizontal" }))
{
   <ul class="navbar-nav">
       @if (User.Identity?.IsAuthenticated == true && !(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development"))
       {
           <li class="nav-item">
               <span class="navbar-text text-dark">Hello @User.Identity?.Name!</span>
           </li>
           <li class="nav-item">
               <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
           </li>
       }
       else
       {
           <li class="nav-item">
               <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
           </li>
       }
       <li class="navbar-nav">
           <input asp-for="UserName" class="nav-link text-dark" placeholder="Username" style="width:60%" />
           <br />
           <input asp-for="Password" type="password" class="nav-link text-dark" asp-area="MicrosoftIdentity" placeholder="Password" style="width:60%" />
           <br />
           <button type="submit" class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Index" asp-action="SignIn">Anmelden</button>
       </li>
   </ul>
}

Dadurch sollte anschließend die Erstellte Action im IndexController (Index:Controller) aufgerufen werden.

    public class Index : Controller
   {
       private readonly SignInManager<IdentityUser> _signInManager;
       
       public Index(SignInManager<IdentityUser> signInManager)
       {
           _signInManager = signInManager;
       }
       [HttpPost]
       public async Task<IActionResult> SignIn(IndexModel model, string returnUrl = null)
       {
           if (ModelState.IsValid)
           {
               var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);
               if (result.Succeeded)
               {
                   if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
                   {
                       return Redirect(returnUrl);
                   }
                   else
                   {
                       return RedirectToAction("Index", "Home"); // Redirect to the home page or any other authorized page
                   }
               }
               else
               {
                   ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                   return View(model);
               }
           }
           return View(model);
       }

All das habe ich bereits recherchiert, aber aufgrund von für mich unbekannten Fehlern wird bei mir nicht nach Anklicken des Anmelde-Buttons diese Action nicht aufgerufen.

Entschuldige falls es solch einen Artikel schon gibt, aber ich fand leider keinen. Eine Schritt für Schritt Anleitung hierfür wäre super aber ich konnte leider nichts passendes finden. Wäre für jegliche Hilfe sehr dankbar.

Liebe Grüße

Erstellt vor einem Jahr

DANKE für die schnelle Rückmeldung =)

Erstellt vor einem Jahr

Guten Tag,

baute bereits eine gut passende Web-Applikation mit Datenbankzugriff auf einen SQL Server. Nun denke ich natürlich aufgrund von Datensicherheit und Datenschutz an das Einbinden von Active Directory. Zu Beginn stellte ich beim Projekt (zum Testen) ein: "No Authentication", was bedeutet dass ich dies vermutlich auch noch verändern muss.

Suchte bereits nach passenden Anleitungen zur Struktur etc. wurde jedoch nicht fündig. Benötige eine Schritt für Schritt Anleitung für das Einbauen von Active Directory inkl. AD-Gruppen für dementsprechende Berechtigungen.

Würde mich über passende Links freuen.

LG

Erstellt vor einem Jahr

Habe einer Anleitung gefolgt um eine ID für eine Detailansicht zu übergeben. Dies startet indem ich in Controller1 einn Link dadurch erstelle:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
public class MyController : Controller
{
   private readonly LinkGenerator _linkGenerator;
   public MyController(LinkGenerator linkGenerator)
   {
       _linkGenerator = linkGenerator;
   }
   public IActionResult Details(int id)
   {
       // Generieren Sie den Link zur nächsten Seite und übergeben Sie die ID als Parameter.
       var nextPageLink = _linkGenerator.GetPathByAction("NextPageAction", "NextPageController", new { id = id });
       return Redirect(nextPageLink);
   }
}

Im HTML Code gebe ich folgendes ein: (statt 123 natürlich die dementsprechende ID von der Datenbank)

<a asp-controller="MyController" asp-action="Details" asp-route-id="123">Details anzeigen</a>

Und lenke damit in den neuen Controller wo ich die ID übernehmen kann (laut Anleitung)

public class NextPageController : Controller
{
   public IActionResult NextPageAction(int id)
   {
       // Verwenden Sie die empfangene ID hier auf der nächsten Seite.
       return View();
   }
}

Meine Frage dazu ist, was mach ich falsch, warum dies bei mir nicht auf die neue Seite lenkt. Machte es genauso und eine weitere Frage dazu wäre: Wenn ich hier die ID erhalte ist es gut und schön, jedoch wenn ich dann die Seite aufrufe verliere ich ja die Daten wieder? ⇒ wie kann ich diese dann beibehalten? (ev. Property mit readonly?)

Erstellt vor einem Jahr

Guten Tag,

da mir Datensicherheit sehr wichtig ist, dachte ich auch an folgendes ⇒ Das Passwort steht im Sourcecode und das kam mir eben sehr komisch vor. Was wäre aus deiner Sicht die korrekte Lösung dafür, dies professionell zu lösen?

Wäre froh dies SICHER lösen zu können.

Erstellt vor einem Jahr

Guten Tag.

Habe mich mittlerweile reingelesen, nur wäre für mich ein Anwendungsbeispiel sehr wichtig wo ich mit Hilfe solch eines Links die Seite wechseln kann. Eine Liste wo man mit Hile eines Links zu einem Element nähere Details sehen kann.

Danke.

Freundliche Grüße