Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm erfahren Sie, wie Sie einer ASP.NET-Anwendung ASP.NET Identity (das neue Mitgliedschaftssystem für ASP.NET) hinzufügen.
Wenn Sie ein neues Web Forms- oder MVC-Projekt in Visual Studio 2017 RTM mit einzelnen Konten erstellen, installiert Visual Studio alle erforderlichen Pakete und fügt alle erforderlichen Klassen für Sie hinzu. In diesem Lernprogramm werden die Schritte zum Hinzufügen ASP.NET Identitätsunterstützung zu Ihrem vorhandenen Web Forms-Projekt oder einem neuen leeren Projekt veranschaulicht. Ich beschreibt alle NuGet-Pakete, die Sie installieren müssen, und Klassen, die Sie hinzufügen müssen. Ich werde Beispielwebformulare für die Registrierung neuer Benutzer und die Anmeldung durchgehen, während alle wichtigsten Einstiegspunkt-APIs für die Benutzerverwaltung und Authentifizierung hervorgehoben werden. In diesem Beispiel wird die ASP.NET Identity-Standardimplementierung für SQL-Datenspeicher verwendet, die auf Entity Framework basiert. In diesem Lernprogramm verwenden wir LocalDB für die SQL-Datenbank.
Erste Schritte mit ASP.NET Identity
Beginnen Sie mit der Installation und Ausführung von Visual Studio 2017.
Wählen Sie auf der Startseite " Neues Projekt" aus, oder Sie können das Menü verwenden und " Datei" und dann " Neues Projekt" auswählen.
Erweitern Sie im linken Bereich Visual C#, und wählen Sie dann "Web" und dann ASP.NET Webanwendung (.Net Framework) aus. Benennen Sie Ihr Projekt "WebFormsIdentity", und wählen Sie "OK" aus.
Wählen Sie im Dialogfeld "Neues ASP.NET Projekt " die Vorlage "Leer " aus.
Beachten Sie, dass die Schaltfläche " Authentifizierung ändern " deaktiviert ist und in dieser Vorlage keine Authentifizierungsunterstützung bereitgestellt wird. Mit den Webformularen, MVC- und Web-API-Vorlagen können Sie den Authentifizierungsansatz auswählen.
Hinzufügen von Identitätspaketen zu Ihrer App
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, und wählen Sie "NuGet-Pakete verwalten" aus. Suchen und installieren Sie das Microsoft.AspNet.Identity.EntityFramework-Paket .
Beachten Sie, dass dieses Paket die Abhängigkeitspakete installiert: EntityFramework und Microsoft ASP.NET Identity Core.
Hinzufügen eines Webformulars zum Registrieren von Benutzern
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, und wählen Sie "Hinzufügen" und dann "Webformular" aus.
Geben Sie im Dialogfeld 'Name für Element angeben' den Namen des neuen Webformulars 'Register' ein, und wählen Sie dann 'OK' aus.
Ersetzen Sie das Markup in der generierten Register.aspx Datei durch den folgenden Code. Die Codeänderungen sind hervorgehoben.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="WebFormsIdentity.Register" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body style="font-family: Arial, Helvetica, sans-serif; font-size: small"> <form id="form1" runat="server"> <div> <h4 style="font-size: medium">Register a new user</h4> <hr /> <p> <asp:Literal runat="server" ID="StatusMessage" /> </p> <div style="margin-bottom:10px"> <asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label> <div> <asp:TextBox runat="server" ID="UserName" /> </div> </div> <div style="margin-bottom:10px"> <asp:Label runat="server" AssociatedControlID="Password">Password</asp:Label> <div> <asp:TextBox runat="server" ID="Password" TextMode="Password" /> </div> </div> <div style="margin-bottom:10px"> <asp:Label runat="server" AssociatedControlID="ConfirmPassword">Confirm password</asp:Label> <div> <asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" /> </div> </div> <div> <div> <asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" /> </div> </div> </div> </form> </body> </html>Hinweis
Dies ist nur eine vereinfachte Version der Register.aspx Datei, die erstellt wird, wenn Sie ein neues ASP.NET Web Forms-Projekt erstellen. Im obigen Markup werden Formularfelder und eine Schaltfläche zum Registrieren eines neuen Benutzers hinzugefügt.
Öffnen Sie die Register.aspx.cs Datei, und ersetzen Sie den Inhalt der Datei durch den folgenden Code:
using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using System; using System.Linq; namespace WebFormsIdentity { public partial class Register : System.Web.UI.Page { protected void CreateUser_Click(object sender, EventArgs e) { // Default UserStore constructor uses the default connection string named: DefaultConnection var userStore = new UserStore<IdentityUser>(); var manager = new UserManager<IdentityUser>(userStore); var user = new IdentityUser() { UserName = UserName.Text }; IdentityResult result = manager.Create(user, Password.Text); if (result.Succeeded) { StatusMessage.Text = string.Format("User {0} was created successfully!", user.UserName); } else { StatusMessage.Text = result.Errors.FirstOrDefault(); } } } }Hinweis
- Der obige Code ist eine vereinfachte Version der Register.aspx.cs Datei, die erstellt wird, wenn Sie ein neues ASP.NET Web Forms-Projekt erstellen.
- Die IdentityUser-Klasse ist die standardmäßige EntityFramework-Implementierung der IUser-Schnittstelle . IUser-Schnittstelle ist die minimale Schnittstelle für einen Benutzer in ASP.NET Identity Core.
- Die UserStore-Klasse ist die Standardmäßige EntityFramework-Implementierung eines Benutzerspeichers. Diese Klasse implementiert die minimalen Schnittstellen von ASP.NET Identity Core: IUserStore, IUserLoginStore, IUserClaimStore und IUserRoleStore.
- Die UserManager-Klasse macht benutzerbezogene APIs verfügbar, die Änderungen automatisch im UserStore speichern.
- Die IdentityResult-Klasse stellt das Ergebnis eines Identitätsvorgangs dar.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, und wählen Sie "Hinzufügen", "ASP.NET Ordner hinzufügen " und dann App_Data aus.
Öffnen Sie die dateiWeb.config , und fügen Sie einen Verbindungszeichenfolgeneintrag für die Datenbank hinzu, mit dem Benutzerinformationen gespeichert werden. Die Datenbank wird zur Laufzeit von EntityFramework für die Identitätsentitäten erstellt. Die Verbindungszeichenfolge ähnelt einer, die für Sie erstellt wurde, wenn Sie ein neues Web Forms-Projekt erstellen. Der hervorgehobene Code zeigt das Markup, das Sie hinzufügen sollten:
<?xml version="1.0" encoding="utf-8"?> <!-- For more information on how to configure your ASP.NET application, please visit https://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit https://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\WebFormsIdentity.mdf;Initial Catalog=WebFormsIdentity;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> </configuration>Hinweis
Ersetzen Sie
(localdb)\v11.0für Visual Studio 2015 oder höher in Ihrer Verbindungszeichenfolge durch(localdb)\MSSQLLocalDB.Klicken Sie mit der rechten Maustaste auf die Datei Register.aspx in Ihrem Projekt, und wählen Sie "Als Startseite festlegen" aus. Drücken Sie STRG+F5, um die Webanwendung zu erstellen und auszuführen. Geben Sie einen neuen Benutzernamen und ein neues Kennwort ein, und wählen Sie dann "Registrieren" aus.
Hinweis
ASP.NET Identity unterstützt die Überprüfung, und in diesem Beispiel können Sie das Standardverhalten für Benutzer- und Kennwortvalidatoren überprüfen, die aus dem Identity Core-Paket stammen. Der Standardvalidator für Benutzer (
UserValidator) hat eine EigenschaftAllowOnlyAlphanumericUserNames, deren Standardwert auftruefestgelegt ist. Der Standard validator für Kennwort (MinimumLengthValidator) stellt sicher, dass das Kennwort mindestens 6 Zeichen enthält. Diese Validatoren sind Eigenschaften vonUserManager, die überschrieben werden können, wenn Sie eine benutzerdefinierte Überprüfung vornehmen möchten.
Überprüfen der Von Entity Framework generierten LocalDb Identity-Datenbank und -Tabellen
Wählen Sie im Menü "Ansicht" den Server-Explorer aus.
Erweitern Sie DefaultConnection (WebFormsIdentity),erweitern Sie Tabellen, klicken Sie mit der rechten Maustaste auf AspNetUsers , und wählen Sie dann "Tabellendaten anzeigen" aus.
Konfigurieren der Anwendung für die OWIN-Authentifizierung
An diesem Punkt haben wir nur Unterstützung für das Erstellen von Benutzern hinzugefügt. Nun werden wir zeigen, wie wir eine Authentifizierung hinzufügen können, um einen Benutzer anzumelden. ASP.NET Identity verwendet Microsoft OWIN Authentication Middleware für die Formularauthentifizierung. Die OWIN-Cookieauthentifizierung ist ein Cookie- und anspruchsbasierter Authentifizierungsmechanismus, der von jedem Framework verwendet werden kann, das auf OWIN oder IIS gehostet wird. Mit diesem Modell können dieselben Authentifizierungspakete in mehreren Frameworks verwendet werden, einschließlich ASP.NET MVC und Web Forms. Weitere Informationen zu Project Katana und dem Ausführen von Middleware in einer hostagnostischen Umgebung finden Sie unter Erste Schritte mit dem Katana-Projekt.
Installieren von Authentifizierungspaketen in Ihrer Anwendung
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, und wählen Sie "NuGet-Pakete verwalten" aus. Suchen und installieren Sie das Microsoft.AspNet.Identity.Owin-Paket .
Suchen und installieren Sie das Microsoft.Owin.Host.SystemWeb-Paket .
Hinweis
Das Microsoft.Aspnet.Identity.Owin-Paket enthält eine Reihe von OWIN-Erweiterungsklassen zum Verwalten und Konfigurieren der OWIN-Authentifizierungs-Middleware, die von ASP.NET Identity Core-Paketen verwendet werden soll. Das Microsoft.Owin.Host.SystemWeb-Paket enthält einen OWIN-Server, mit dem OWIN-basierte Anwendungen mithilfe der ASP.NET Anforderungspipeline auf IIS ausgeführt werden können. Weitere Informationen finden Sie unter OWIN Middleware in der integrierten IIS-Pipeline.
Hinzufügen von OWIN-Start- und Authentifizierungskonfigurationsklassen
Klicken Sie im
Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, wählen Sie "Hinzufügen"und dann Neues Element hinzufügen aus. Geben Sie im Dialogfeld "Suchen" "owin" ein. Benennen Sie die Klasse "Startup", und wählen Sie "Hinzufügen" aus.
Fügen Sie in der datei Startup.cs den unten gezeigten hervorgehobenen Code hinzu, um die OWIN-Cookieauthentifizierung zu konfigurieren.
using Microsoft.AspNet.Identity; using Microsoft.Owin; using Microsoft.Owin.Security.Cookies; using Owin; [assembly: OwinStartup(typeof(WebFormsIdentity.Startup))] namespace WebFormsIdentity { public class Startup { public void Configuration(IAppBuilder app) { // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888 app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Login") }); } } }Hinweis
Diese Klasse enthält das
OwinStartupAttribut zum Angeben der OWIN-Startklasse. Jede OWIN-Anwendung verfügt über eine Startklasse, in der Sie Komponenten für die Anwendungspipeline angeben. Weitere Informationen zu diesem Modell finden Sie unter OWIN Startup Class Detection .
Hinzufügen von Webformularen zum Registrieren und Anmelden von Benutzern
Öffnen Sie die Register.aspx.cs Datei, und fügen Sie den folgenden Code hinzu, der sich beim erfolgreichen Registrieren beim Benutzer anmeldet.
using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using System; using System.Linq; using System.Web; namespace WebFormsIdentity { public partial class Register : System.Web.UI.Page { protected void CreateUser_Click(object sender, EventArgs e) { // Default UserStore constructor uses the default connection string named: DefaultConnection var userStore = new UserStore<IdentityUser>(); var manager = new UserManager<IdentityUser>(userStore); var user = new IdentityUser() { UserName = UserName.Text }; IdentityResult result = manager.Create(user, Password.Text); if (result.Succeeded) { var authenticationManager = HttpContext.Current.GetOwinContext().Authentication; var userIdentity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); authenticationManager.SignIn(new AuthenticationProperties() { }, userIdentity); Response.Redirect("~/Login.aspx"); } else { StatusMessage.Text = result.Errors.FirstOrDefault(); } } } }Hinweis
- Da ASP.NET Identitäts- und OWIN-Cookieauthentifizierung anspruchsbasiertes System sind, erfordert das Framework, dass der App-Entwickler eine ClaimsIdentity für den Benutzer generiert. ClaimsIdentity enthält Informationen zu allen Ansprüchen für den Benutzer, z. B. zu welchen Rollen der Benutzer gehört. Sie können in dieser Phase auch weitere Ansprüche für den Benutzer hinzufügen.
- Sie können den Benutzer anmelden, indem Sie den AuthenticationManager von OWIN verwenden, indem Sie
SignInaufrufen und die ClaimsIdentity übergeben, wie oben gezeigt. Dieser Code anmeldet sich beim Benutzer und generiert auch ein Cookie. Dieser Aufruf ist analog zu FormAuthentication.SetAuthCookie , die vom FormsAuthentication-Modul verwendet wird.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, wählen Sie Hinzufügen und dann Webformular aus. Benennen Sie das Webformular Login.
Ersetzen Sie den Inhalt der datei Login.aspx durch den folgenden Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="WebFormsIdentity.Login" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body style="font-family: Arial, Helvetica, sans-serif; font-size: small"> <form id="form1" runat="server"> <div> <h4 style="font-size: medium">Log In</h4> <hr /> <asp:PlaceHolder runat="server" ID="LoginStatus" Visible="false"> <p> <asp:Literal runat="server" ID="StatusText" /> </p> </asp:PlaceHolder> <asp:PlaceHolder runat="server" ID="LoginForm" Visible="false"> <div style="margin-bottom: 10px"> <asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label> <div> <asp:TextBox runat="server" ID="UserName" /> </div> </div> <div style="margin-bottom: 10px"> <asp:Label runat="server" AssociatedControlID="Password">Password</asp:Label> <div> <asp:TextBox runat="server" ID="Password" TextMode="Password" /> </div> </div> <div style="margin-bottom: 10px"> <div> <asp:Button runat="server" OnClick="SignIn" Text="Log in" /> </div> </div> </asp:PlaceHolder> <asp:PlaceHolder runat="server" ID="LogoutButton" Visible="false"> <div> <div> <asp:Button runat="server" OnClick="SignOut" Text="Log out" /> </div> </div> </asp:PlaceHolder> </div> </form> </body> </html>Ersetzen Sie den Inhalt der Login.aspx.cs Datei durch Folgendes:
using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using System; using System.Web; using System.Web.UI.WebControls; namespace WebFormsIdentity { public partial class Login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (User.Identity.IsAuthenticated) { StatusText.Text = string.Format("Hello {0}!!", User.Identity.GetUserName()); LoginStatus.Visible = true; LogoutButton.Visible = true; } else { LoginForm.Visible = true; } } } protected void SignIn(object sender, EventArgs e) { var userStore = new UserStore<IdentityUser>(); var userManager = new UserManager<IdentityUser>(userStore); var user = userManager.Find(UserName.Text, Password.Text); if (user != null) { var authenticationManager = HttpContext.Current.GetOwinContext().Authentication; var userIdentity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, userIdentity); Response.Redirect("~/Login.aspx"); } else { StatusText.Text = "Invalid username or password."; LoginStatus.Visible = true; } } protected void SignOut(object sender, EventArgs e) { var authenticationManager = HttpContext.Current.GetOwinContext().Authentication; authenticationManager.SignOut(); Response.Redirect("~/Login.aspx"); } } }Hinweis
-
Page_Loadüberprüft jetzt den Status des aktuellen Benutzers und führt basierend auf seinemContext.User.Identity.IsAuthenticatedStatus eine Aktion aus. Angemeldeter Benutzername anzeigen: Das Microsoft ASP.NET Identity Framework hat Erweiterungsmethoden zur System.Security.Principal.IIdentity hinzugefügt, die es Ihnen ermöglichen, denUserNameundUserIddes angemeldeten Benutzers abzurufen. Diese Erweiterungsmethoden werden in derMicrosoft.AspNet.Identity.CoreAssembly definiert. Diese Erweiterungsmethoden sind der Ersatz für HttpContext.User.Identity.Name . - SignIn-Methode:
ThisDiese Methode ersetzt die vorherigeCreateUser_ClickMethode in diesem Beispiel und meldet den Benutzer nach der erfolgreichen Erstellung an.
Das Microsoft OWIN Framework hat Erweiterungsmethoden fürSystem.Web.HttpContexthinzugefügt, mit denen Sie einen Verweis auf einenIOwinContexterhalten können. Diese Erweiterungsmethoden werden inMicrosoft.Owin.Host.SystemWebassembly definiert. DieOwinContextKlasse macht eineIAuthenticationManagerEigenschaft verfügbar, die die in der aktuellen Anforderung verfügbare Authentifizierungs-Middleware-Funktionalität darstellt. Sie können den Benutzer anmelden, indem Sie das OWINAuthenticationManagerverwenden, die FunktionSignInaufrufen und dasClaimsIdentityübergeben, wie oben gezeigt. Da ASP.NET Identität und OWIN-Cookieauthentifizierung ein anspruchsbasiertes System ist, erfordert das Framework, dass die App einClaimsIdentityfür den Benutzer generiert. DiesClaimsIdentityenthält Informationen zu allen Ansprüchen für den Benutzer, z. B. zu welchen Rollen der Benutzer gehört. Sie können auch in dieser Phase weitere Ansprüche für den Benutzer hinzufügen. Dieser Code anmeldet den Benutzer und generiert auch ein Cookie. Dieser Aufruf ist analog zu FormAuthentication.SetAuthCookie , die vom FormsAuthentication-Modul verwendet wird. -
SignOut-Methode: Ruft einen Verweis auf dieAuthenticationManagervon OWIN ab und ruftSignOutauf. Dies entspricht der FormsAuthentication.SignOut-Methode , die vom FormsAuthentication-Modul verwendet wird.
-
Drücken Sie STRG+F5 , um die Webanwendung zu erstellen und auszuführen. Geben Sie einen neuen Benutzernamen und ein neues Kennwort ein, und wählen Sie dann "Registrieren" aus.
Hinweis: An diesem Punkt wird der neue Benutzer erstellt und angemeldet.Wählen Sie die Schaltfläche " Abmelden" aus . Sie werden zum Formular "Anmelden" umgeleitet.
Geben Sie einen ungültigen Benutzernamen oder ein ungültiges Kennwort ein, und wählen Sie die Schaltfläche " Anmelden " aus. Die
UserManager.FindMethode gibt NULL zurück und die Fehlermeldung: " Ungültiger Benutzername oder Kennwort " wird angezeigt.