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.
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.
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.
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.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); }
Melden Sie sich an.
Wenn der Benutzer erfolgreich erstellt wurde, wird er von derSignInAsync
-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.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.
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
- Erstellen einer ASP.NET MVC 5-App mit Facebook und Google OAuth2 und OpenID-Anmeldung
Im Tutorial wird die ASP.NET Identity-API verwendet, um der Benutzerdatenbank Profilinformationen hinzuzufügen und sich bei Google und Facebook zu authentifizieren. - Erstellen einer ASP.NET MVC-App mit Authentifizierung, SQL-Datenbank und Bereitstellung in Azure App Service
In diesem Tutorial erfahren Sie, wie Sie die Identitäts-API verwenden, um Benutzer und Rollen hinzuzufügen. - https://github.com/rustd/AspnetIdentitySample
Beispielanwendung, die zeigt, wie Grundlegende Rollen und Benutzerunterstützung hinzugefügt werden und wie Rollen und Benutzerverwaltung ausgeführt werden.