Einführung in ASP.NET Identity

Das ASP.NET Mitgliedschaftssystem wurde bereits 2005 mit ASP.NET 2.0 eingeführt, und seitdem gab es viele Änderungen in der Art und Weise, wie Webanwendungen Authentifizierung und Autorisierung normalerweise behandeln. ASP.NET Identität ist ein neuer Blick darauf, wie das Mitgliedschaftssystem aussehen sollte, wenn Sie moderne Anwendungen für das Web, Telefon oder Tablet erstellen.

Hintergrund: Mitgliedschaft in ASP.NET

ASP.NET-Mitgliedschaft

ASP.NET Mitgliedschaft wurde entwickelt, um die im Jahr 2005 gängigen Anforderungen an die Websitemitgliedschaft zu erfüllen, die die Formularauthentifizierung und eine SQL Server Datenbank für Benutzernamen, Kennwörter und Profildaten umfassten. Heute gibt es eine viel breitere Palette von Datenspeicheroptionen für Webanwendungen, und die meisten Entwickler möchten es ihren Websites ermöglichen, Social Identity-Anbieter für Authentifizierungs- und Autorisierungsfunktionen zu verwenden. Die Einschränkungen des Designs ASP.NET Mitgliedschaft erschweren diesen Übergang:

  • Das Datenbankschema wurde für SQL Server entwickelt und kann nicht geändert werden. Sie können Profilinformationen hinzufügen, aber die zusätzlichen Daten werden in eine andere Tabelle gepackt, was den Zugriff auf andere Wege erschwert, außer über die Profilanbieter-API.
  • Mit dem Anbietersystem können Sie den Sicherungsdatenspeicher ändern, aber das System ist auf Annahmen ausgelegt, die für eine relationale Datenbank geeignet sind. Sie können einen Anbieter schreiben, um Mitgliedschaftsinformationen in einem nicht relationalen Speichermechanismus wie Azure Storage Tables zu speichern, aber dann müssen Sie den relationalen Entwurf umgehen, indem Sie viel Code und viele System.NotImplementedException Ausnahmen für Methoden schreiben, die nicht für NoSQL-Datenbanken gelten.
  • Da die Anmelde-/Abmeldefunktion auf der Formularauthentifizierung basiert, kann das Mitgliedschaftssystem OWIN nicht verwenden. OWIN umfasst Middlewarekomponenten für die Authentifizierung, einschließlich Unterstützung für Anmeldungen mit externen Identitätsanbietern (z. B. Microsoft-Konten, Facebook, Google, Twitter) und Anmeldungen mit Organisationskonten aus lokales Active Directory oder Azure Active Directory. OWIN umfasst auch Unterstützung für OAuth 2.0, JWT und CORS.

einfache Mitgliedschaft ASP.NET

ASP.NET einfache Mitgliedschaft wurde als Mitgliedschaftssystem für ASP.NET Web Pages entwickelt. Es wurde mit WebMatrix und Visual Studio 2010 SP1 veröffentlicht. Das Ziel der einfachen Mitgliedschaft bestand darin, das Hinzufügen von Mitgliedschaftsfunktionen zu einer Webseitenanwendung zu vereinfachen.

Die einfache Mitgliedschaft hat das Anpassen von Benutzerprofilinformationen vereinfacht, aber sie teilt weiterhin die anderen Probleme mit ASP.NET Mitgliedschaft, und es gibt einige Einschränkungen:

  • Es war schwierig, Mitgliedschaftssystemdaten in einem nicht relationalen Speicher zu speichern.
  • Sie können es nicht mit OWIN verwenden.
  • Es funktioniert nicht gut mit vorhandenen ASP.NET-Mitgliedschaftsanbietern und ist nicht erweiterbar.

ASP.NET-Universelle Anbieter

ASP.NET-Universelle Anbieter wurden entwickelt, um die Beibehaltung von Mitgliedschaftsinformationen in Microsoft Azure SQL-Datenbank zu ermöglichen, und sie arbeiten auch mit SQL Server Compact. Die Universelle Anbieter wurden auf Entity Framework Code First erstellt, was bedeutet, dass die Universelle Anbieter verwendet werden kann, um Daten in jedem von EF unterstützten Speicher zu speichern. Mit dem Universelle Anbieter wurde auch das Datenbankschema ziemlich bereinigt.

Die Universelle Anbieter basieren auf der ASP.NET-Mitgliedschaftsinfrastruktur, sodass sie weiterhin die gleichen Einschränkungen wie der SqlMembership-Anbieter aufweisen. Das heißt, sie wurden für relationale Datenbanken entwickelt, und es ist schwierig, Profil- und Benutzerinformationen anzupassen. Diese Anbieter verwenden auch weiterhin die Formularauthentifizierung für die Anmelde- und Abmeldefunktion.

ASP.NET Identity

Während sich die Mitgliedschaftsgeschichte in ASP.NET im Laufe der Jahre weiterentwickelt hat, hat das ASP.NET-Team viel aus dem Feedback von Kunden gelernt.

Die Annahme, dass sich Benutzer anmelden, indem sie einen Benutzernamen und ein Kennwort eingeben, die sie in Ihrer eigenen Anwendung registriert haben, ist nicht mehr gültig. Das Web ist sozialer geworden. Benutzer interagieren in Echtzeit über soziale Kanäle wie Facebook, Twitter und andere soziale Websites miteinander. Entwickler möchten, dass sich Benutzer mit ihren sozialen Identitäten anmelden können, damit sie eine umfassende Erfahrung auf ihren Websites haben. Ein modernes Mitgliedschaftssystem muss umleitungsbasierte Anmeldungen an Authentifizierungsanbieter wie Facebook, Twitter und andere ermöglichen.

Mit der Entwicklung der Webentwicklung entwickelten sich auch die Muster der Webentwicklung. Komponententests von Anwendungscode wurden zu einem Hauptanliegen für Anwendungsentwickler. Im Jahr 2008 ASP.NET ein neues Framework hinzugefügt, das auf dem MVC-Muster (Model-View-Controller) basiert, zum Teil, um Entwicklern beim Erstellen von komponententestbaren ASP.NET Anwendungen zu helfen. Entwickler, die ihre Anwendungslogik komponententesten wollten, wollten dies auch mit dem Mitgliedschaftssystem tun können.

Unter Berücksichtigung dieser Änderungen in der Webanwendungsentwicklung wurde ASP.NET Identity mit den folgenden Zielen entwickelt:

  • Ein ASP.NET Identitätssystem

    • ASP.NET Identity kann mit allen ASP.NET Frameworks wie ASP.NET MVC, Web Forms, Webseiten, Web-API und SignalR verwendet werden.
    • ASP.NET Identity kann verwendet werden, wenn Sie Web-, Telefon-, Store- oder Hybridanwendungen erstellen.
  • Einfaches Einstecken von Profildaten über den Benutzer

    • Sie haben die Kontrolle über das Schema der Benutzer- und Profilinformationen. Beispielsweise können Sie das System problemlos aktivieren, um Geburtsdaten zu speichern, die von Benutzern eingegeben wurden, wenn sie ein Konto in Ihrer Anwendung registrieren.
  • Persistenzsteuerung

    • Standardmäßig speichert das ASP.NET Identity-System alle Benutzerinformationen in einer Datenbank. ASP.NET Identity verwendet Entity Framework Code First, um den gesamten Persistenzmechanismus zu implementieren.
    • Da Sie das Datenbankschema steuern, sind gängige Aufgaben wie das Ändern von Tabellennamen oder das Ändern des Datentyps von Primärschlüsseln einfach zu erledigen.
    • Es ist einfach, verschiedene Speichermechanismen wie SharePoint, Azure Storage Table Service, NoSQL-Datenbanken usw. anzuschließen, ohne Ausnahmen auslösen System.NotImplementedExceptions zu müssen.
  • Komponententestfähigkeit

    • ASP.NET Identity macht die Webanwendung leichter testbar. Sie können Komponententests für die Teile Ihrer Anwendung schreiben, die ASP.NET Identity verwenden.
  • Rollenanbieter

    • Es gibt einen Rollenanbieter, mit dem Sie den Zugriff auf Teile Ihrer Anwendung nach Rollen einschränken können. Sie können ganz einfach Rollen wie "Admin" erstellen und Rollen Benutzer hinzufügen.
  • Anspruchsbasiert

    • ASP.NET Identity unterstützt die anspruchsbasierte Authentifizierung, bei der die Identität des Benutzers als Anspruchssatz dargestellt wird. Ansprüche ermöglichen es Entwicklern, die Identität eines Benutzers viel aussagekräftiger zu beschreiben, als Rollen zulassen. Während die Rollenmitgliedschaft nur ein boolescher Wert (Mitglied oder Nichtmitglied) ist, kann ein Anspruch umfangreiche Informationen zur Identität und Mitgliedschaft des Benutzers enthalten.
  • Anbieter für soziale Anmeldungen

    • Sie können Ihrer Anwendung ganz einfach Soziale Anmeldungen wie Microsoft-Konto, Facebook, Twitter, Google und andere hinzufügen und die benutzerspezifischen Daten in Ihrer Anwendung speichern.
  • OWIN-Integration

    • ASP.NET Authentifizierung basiert jetzt auf OWIN-Middleware, die auf jedem OWIN-basierten Host verwendet werden kann. ASP.NET Identity hat keine Abhängigkeit von System.Web. Es ist ein vollständig kompatibles OWIN-Framework und kann in jeder von OWIN gehosteten Anwendung verwendet werden.
    • ASP.NET Identity verwendet die OWIN-Authentifizierung zum Anmelden/Abmelden von Benutzern auf der Website. Dies bedeutet, dass die Anwendung dazu OWIN CookieAuthentication verwendet, anstatt formsAuthentication zu generieren.
  • NuGet-Paket

    • ASP.NET Identity wird als NuGet-Paket verteilt, das in den ASP.NET MVC-, Web Forms- und Web-API-Vorlagen installiert ist, die mit Visual Studio 2017 ausgeliefert werden. Sie können dieses NuGet-Paket aus dem NuGet-Katalog herunterladen.
    • Die Veröffentlichung ASP.NET Identity als NuGet-Paket erleichtert es dem ASP.NET Team, neue Features und Fehlerbehebungen zu durchlaufen und diese auf agile Weise an Entwickler bereitzustellen.

Erste Schritte mit ASP.NET Identity

ASP.NET Identity wird in den Visual Studio 2017-Projektvorlagen für ASP.NET MVC, Web Forms, Web-API und SPA verwendet. In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie die Projektvorlagen ASP.NET Identity verwenden, um Funktionen zum Registrieren, Anmelden und Abmelden eines Benutzers hinzuzufügen.

ASP.NET Identity wird mithilfe des folgenden Verfahrens implementiert. Der Zweck dieses Artikels besteht darin, Ihnen einen allgemeinen Überblick über ASP.NET Identität zu geben. Sie können es Schritt für Schritt befolgen oder einfach die Details lesen. Ausführlichere Anweisungen zum Erstellen von Apps mit ASP.NET Identity, einschließlich der Verwendung der neuen API zum Hinzufügen von Benutzern, Rollen und Profilinformationen, finden Sie im Abschnitt Nächste Schritte am Ende dieses Artikels.

  1. Erstellen Sie eine ASP.NET MVC-Anwendung mit individuellen Konten. Sie können ASP.NET Identity in ASP.NET MVC, Web Forms, Web-API, SignalR usw. verwenden. In diesem Artikel beginnen wir mit einer ASP.NET MVC-Anwendung.

    Abbildung des neuen ASP dot Net-Projektfensters

  2. Das erstellte Projekt enthält die folgenden drei Pakete für ASP.NET Identity.

    • Microsoft.AspNet.Identity.EntityFramework
      Dieses Paket verfügt über die Entity Framework-Implementierung von ASP.NET Identity, die die ASP.NET Identitätsdaten und das Schema für SQL Server beibehalten.
    • Microsoft.AspNet.Identity.Core
      Dieses Paket enthält die Kernschnittstellen für ASP.NET Identity. Dieses Paket kann verwendet werden, um eine Implementierung für ASP.NET Identity zu schreiben, die auf verschiedene Persistenzspeicher wie Azure Table Storage, NoSQL-Datenbanken usw. abzielt.
    • Microsoft.AspNet.Identity.OWIN
      Dieses Paket enthält Funktionen, die zum Verbinden der OWIN-Authentifizierung mit ASP.NET Identity in ASP.NET Anwendungen verwendet werden. Dies wird verwendet, wenn Sie Ihrer Anwendung Anmeldefunktionen hinzufügen und OWIN Cookie Authentication-Middleware aufrufen, um ein Cookie zu generieren.
  3. Erstellen eines Benutzers.
    Starten Sie die Anwendung, und klicken Sie dann auf den Link Registrieren , um einen Benutzer zu erstellen. Die folgende Abbildung zeigt die Seite Registrieren, die den Benutzernamen und das Kennwort erfasst.

    Abbildung des Erstellens eines neuen Kontos

    Wenn der Benutzer die Schaltfläche Registrieren auswählt, erstellt die Register Aktion des Kontocontrollers den Benutzer, indem er die ASP.NET-Identitäts-API aufruft, wie unten hervorgehoben:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser() { UserName = model.UserName };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }
    
        // If we got this far, something failed, redisplay form
        return View(model);
    }
    
  4. Melden Sie sich an.
    Wenn der Benutzer erfolgreich erstellt wurde, wird er von der SignInAsync -Methode angemeldet.

     [HttpPost]
     [AllowAnonymous]
     [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                 await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
                        
                 // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
                 // Send an email with this link
                 // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                 // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                 // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
    
                 return RedirectToAction("Index", "Home");
             }
             AddErrors(result);
         }
    
        // If we got this far, something failed, redisplay form
         return View(model);
     }
    

    Die SignInManager.SignInAsync -Methode generiert ein ClaimsIdentity-Element. Da ASP.NET Identity und OWIN Cookie Authentication anspruchsbasiertes System sind, erfordert das Framework, dass die App eine ClaimsIdentity für den Benutzer generiert. ClaimsIdentity enthält Informationen zu allen Ansprüchen für den Benutzer, z. B. zu den Rollen, zu der der Benutzer gehört.

  5. Melden Sie sich ab.
    Wählen Sie den Link Abmelden aus , um die Aktion Abmelden im Kontocontroller aufzurufen.

    // POST: /Account/LogOff
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();
        return RedirectToAction("Index", "Home");
    }
    

    Der hervorgehobene Code oben zeigt die OWIN-Methode AuthenticationManager.SignOut . Dies entspricht der FormsAuthentication.SignOut-Methode, die vom FormsAuthentication-Modul in Web Forms verwendet wird.

Komponenten von ASP.NET Identity

Das folgende Diagramm zeigt die Komponenten des ASP.NET Identity-Systems (wählen Sie in diesem oder im Diagramm aus, um es zu vergrößern). Die grün angezeigten Pakete bilden das ASP.NET Identity-System. Alle anderen Pakete sind Abhängigkeiten, die für die Verwendung des ASP.NET Identity-Systems in ASP.NET Anwendungen erforderlich sind.

Diagramm, das die Komponenten des A S P dot Net-Identitätssystems zeigt

Es folgt eine kurze Beschreibung der NuGet-Pakete, die zuvor nicht erwähnt wurden:

  • Microsoft.Owin.Security.Cookies
    Middleware, die es einer Anwendung ermöglicht, cookiebasierte Authentifizierung zu verwenden, ähnlich wie ASP. Formularauthentifizierung von NET.
  • EntityFramework
    Entity Framework ist die von Microsoft empfohlene Datenzugriffstechnologie für relationale Datenbanken.

Migrieren von der Mitgliedschaft zu ASP.NET Identity

Wir hoffen, bald Anleitungen zur Migration Ihrer vorhandenen Apps bereitstellen zu können, die ASP.NET Mitgliedschaft oder einfache Mitgliedschaft verwenden, zum neuen ASP.NET Identity-System.

Nächste Schritte