ASP.NET Core Authentifizierung

  • C# (ASP)
  • (Core) Razor

    ASP.NET Core Authentifizierung

    Hallo zusammen,

    ich bin jetzt schon seit einiger Zeit am rätseln, wie ich die bisherige Authentifizierung von ASP.NET Forms in ASP.NET Core Razor einbinden kann. Ich verstehe nicht so recht, wie ich das lösen kann.

    Hier mal die derzeitige ASP.NET WebForms Logik in gekürzter Form.

    C#-Quellcode

    1. protected void btnLogin_Click(object sender, EventArgs e)
    2. {
    3. string benutzername = $"{Config.Domäne}\\{username.Text}";
    4. string ldap = "LDAP://NAME";
    5. var eintrag = new DirectoryEntry(ldap, username.Text, password.Text);
    6. var _object = eintrag.NativeObject;
    7. DirectorySearcher searcher = new DirectorySearcher(eintrag);
    8. searcher.Filter = $"(SAMAccountName={username.Text})";
    9. searcher.PropertiesToLoad.Add("cn");
    10. SearchResult result = searcher.FindOne();
    11. if (result != null)
    12. {
    13. UserPrincipal user = WK5.Library.Basis.DomäneController.FindByIdentity(username.Text);
    14. if (user != null)
    15. {
    16. Mitarbeiter mitarbeiter = new Mitarbeiter(user);
    17. Session["CURRENT_MITARBEITER"] = mitarbeiter;
    18. FormsAuthentication.RedirectFromLoginPage(mitarbeiter.Name, true);
    19. }
    20. else
    21. throw new Exception();
    22. }
    23. }


    Eingeloggt soll man demnach sein, wenn erfolgreich ein Mitarbeiter Objekt erstellt worden ist. Die Logindaten werden hierbei mit dem Active Directory verglichen. Das Object Mitarbeiter ist wichtig, da dieses Informationen über die Berechtigungen enthält, welche beim erstellen aus einer Firebird Datenbank geladen werden.

    Ich habe jetzt schon viel zu Authentifizierung für ASP.NET Core gelesen, doch so ganz werde ich nicht schlau daraus.

    Es gibt scheinbar zwei Methoden einen User zu Authentifizieren:
    1. Claims Authentifizierung
    2. Identity Authentifizierung
    Wenn ich es richtig verstanden habe, dann ist der Unterschied der, dass die Identity Authentifizierung auf Basis einer Datenbank funktioniert und ich bei Claims die Prüfungen manuell durchführen muss. Korrigiert mich gerne wenn ich hier Schwachsinn erzähle.

    Ich kann aber scheinbar auch für die Identity Authentifizierung irgendwie eine eigene Logik festlegen
    docs.microsoft.com/de-de/aspne…iders?view=aspnetcore-3.1

    Hierraus werde ich aber nicht wirklich schlau.

    Auf Basis der Claims Authentifizierung habe ich bereits ein ganz rudimentäres Loginsystem aufgebaut bekommen. Dabei bleibt die wesentliche Kernlogik dieselbe. Lediglich der Teil

    C#-Quellcode

    1. Session["CURRENT_MITARBEITER"] = mitarbeiter;
    2. FormsAuthentication.RedirectFromLoginPage(mitarbeiter.Name, true);
    wird ersetzt durch

    C#-Quellcode

    1. // Claims AUthentifizierung
    2. var userClaims = new List<Claim>()
    3. {
    4. new Claim(ClaimTypes.Name, mitarbeiter.Name)
    5. };
    6. var userIdentity = new ClaimsIdentity(userClaims, "Mitarbeiter");
    7. var userPrincipal = new ClaimsPrincipal(new[] { userIdentity });
    8. HttpContext.SignInAsync(userPrincipal);
    9. Redirect("/");


    Das Problem, welches ich dabei habe ist, dass ich das Object nicht übergeben kann. Die Session scheint es auch nicht mehr zu geben.

    Gibt es eine Möglichkeit, wie ich hier bei erfolgreiche Authentifizierung weiter mit meinem erstellten Mitarbeiter-Objekt arbeiten kann?

    Ich bin echt für jede Hilfe dankbar.

    LG Marvin