Implementieren eines benutzerdefinierten MySQL ASP.NET Identity-Speicheranbieters
von Raquel Soares De Almeida, Suhas Joshi, Tom FitzMacken
ASP.NET Identity ist ein erweiterbares System, mit dem Sie Ihren eigenen Speicheranbieter erstellen und ihn an Ihre Anwendung anschließen können, ohne die Anwendung erneut zu verwenden. In diesem Thema wird beschrieben, wie Sie einen MySQL-Speicheranbieter für ASP.NET Identity erstellen. Eine Übersicht über das Erstellen benutzerdefinierter Speicheranbieter finden Sie unter Übersicht über benutzerdefinierte Speicheranbieter für ASP.NET Identity.
Um dieses Tutorial abzuschließen, müssen Sie über Visual Studio 2013 mit Update 2 verfügen.
In diesem Tutorial finden Sie Folgendes:
- Zeigen Sie, wie Sie eine MySQL-Datenbank instance in Azure erstellen.
- Zeigen Sie, wie Sie ein MySQL-Clienttool (MySQL Workbench) verwenden, um Tabellen zu erstellen und Ihre Remotedatenbank in Azure zu verwalten.
- Zeigen Sie, wie Sie die Standardimplementierung ASP.NET Identity-Speichers durch unsere benutzerdefinierte Implementierung in einem MVC-Anwendungsprojekt ersetzen.
Dieses Tutorial wurde ursprünglich von Raquel Soares De Almeida und Rick Anderson ( @RickAndMSFT ) geschrieben. Das Beispielprojekt wurde von Suhas Joshi für Identity 2.0 aktualisiert. Das Thema wurde von Tom FitzMacken für Identity 2.0 aktualisiert.
Abgeschlossenes Projekt herunterladen
Am Ende dieses Tutorials verfügen Sie über ein MVC-Anwendungsprojekt mit ASP.NET Identity, das mit einer in Azure gehosteten MySQL-Datenbank arbeitet.
Sie können den vollständigen MySQL-Speicheranbieter unter AspNet.Identity.MySQL (GitHub) herunterladen.
Die Schritte, die Sie ausführen
In diesem Lernprogramm führen Sie folgende Schritte aus:
- Erstellen einer MySQL-Datenbank in Azure
- Erstellen der ASP.NET Identity-Tabellen in MySQL
- Erstellen einer MVC-Anwendung und Konfigurieren der Anwendung für die Verwendung des MySQL-Anbieters
- Ausführen der App
Dieses Thema behandelt nicht die Architektur ASP.NET Identity und die Entscheidungen, die Sie bei der Implementierung eines Kundenspeicheranbieters treffen müssen. Diese Informationen finden Sie unter Übersicht über benutzerdefinierte Speicheranbieter für ASP.NET Identität.
Überprüfen der MySQL-Speicheranbieterklassen
Bevor Sie mit den Schritten zum Erstellen des MySQL-Speicheranbieters beginnen, sehen wir uns die Klassen an, aus denen der Speicheranbieter besteht. Sie benötigen Klassen, die die Datenbankvorgänge und -klassen verwalten, die von der Anwendung aufgerufen werden, um Benutzer und Rollen zu verwalten.
Speicherklassen
- IdentityUser : Enthält Eigenschaften für den Benutzer.
- UserStore : Enthält Vorgänge zum Hinzufügen, Aktualisieren oder Abrufen von Benutzern.
- IdentityRole : Enthält Eigenschaften für Rollen.
- RoleStore : Enthält Vorgänge zum Hinzufügen, Löschen, Aktualisieren und Abrufen von Rollen.
Datenzugriffsebenenklassen
In diesem Beispiel enthalten die Klassen der Datenzugriffsebene SQL-Anweisungen zum Arbeiten mit den Tabellen. In Ihrem Code können Sie jedoch objektrelationale Zuordnungen (ORM) wie Entity Framework oder NHibernate verwenden. Insbesondere kann ihre Anwendung eine schlechte Leistung ohne einen ORM aufweisen, der das verzögerte Laden und das Zwischenspeichern von Objekten umfasst.
- MySQLDatabase : Enthält die MySQL-Datenbankverbindung und -Methoden zum Ausführen von Datenbankvorgängen. UserStore und RoleStore werden beide mit einer instance dieser Klasse instanziiert.
- RoleTable : Enthält Datenbankvorgänge für die Tabelle, in der Rollen gespeichert werden.
- UserClaimsTable : Enthält Datenbankvorgänge für die Tabelle, in der Benutzeransprüche gespeichert werden.
- UserLoginsTable : Enthält Datenbankvorgänge für die Tabelle, in der Benutzeranmeldungsinformationen gespeichert sind.
- UserRoleTable : Enthält Datenbankvorgänge für die Tabelle, in der gespeichert wird, welche Benutzer welchen Rollen zugewiesen sind.
- UserTable: Enthält Datenbankvorgänge für die Tabelle, in der Benutzer gespeichert werden.
Erstellen einer MySQL-Datenbank instance in Azure
- Melden Sie sich beim Azure-Portal an.
- Klicken Sie unten auf der Seite auf +NEU , und wählen Sie dann STORE aus.
- Wählen Sie im Assistenten Auswählen und Hinzufügendie Option ClearDB MySQL-Datenbank aus, und klicken Sie unten rechts im Dialogfeld auf den Pfeil weiter.
- Behalten Sie den Standardplan Free bei, und ändern Sie den Namen in IdentityMySQLDatabase. Wählen Sie die Region aus, die Ihnen am nächsten liegt, und klicken Sie dann auf den Pfeil weiter.
- Klicken Sie auf das Häkchen, um die Datenbankerstellung abzuschließen.
- Nachdem die Datenbank erstellt wurde, können Sie sie auf der Registerkarte ADD-ONS im Verwaltungsportal verwalten.
- Sie können die Datenbankverbindungsinformationen abrufen, indem Sie unten auf der Seite auf VERBINDUNGSINFORMATIONEN klicken.
- Kopieren Sie die Verbindungszeichenfolge, indem Sie auf die Schaltfläche Kopieren klicken, und speichern Sie sie, damit Sie sie später in Ihrer MVC-Anwendung verwenden können.
Erstellen der ASP.NET Identity-Tabellen in einer MySQL-Datenbank
Installieren des MySQL Workbench-Tools zum Herstellen einer Verbindung und Verwaltung der MySQL-Datenbank
- Installieren des MySQL Workbench-Tools auf der Seite "MySQL-Downloads"
- Starten Sie die App, und klicken Sie hinzufügen auf die Schaltfläche MySQLConnections + , um eine neue Verbindung hinzuzufügen. Verwenden Sie die Verbindungszeichenfolgendaten, die Sie aus der Azure MySQL-Datenbank kopiert haben, die Sie zuvor in diesem Tutorial erstellt haben.
- Öffnen Sie nach dem Herstellen der Verbindung eine neue Registerkarte Abfrage . Fügen Sie die Befehle aus MySQLIdentity.sql in die Abfrage ein, und führen Sie sie aus, um die Datenbanktabellen zu erstellen.
- Sie verfügen nun über alle erforderlichen ASP.NET Identity-Tabellen, die in einer in Azure gehosteten MySQL-Datenbank erstellt wurden, wie unten gezeigt.
Erstellen eines MVC-Anwendungsprojekts aus der Vorlage und Konfigurieren des MVC-Anbieters für die Verwendung des MySQL-Anbieters
Installieren Sie bei Bedarf entweder Visual Studio Express 2013 für Web oder Visual Studio 2013 mit Update 2.
Laden Sie die ASP.NET herunter. Identity.MySQL-Projekt von GitHub
- Navigieren Sie zur Repository-URL unter AspNet.Identity.MySQL (GitHub).
- Laden Sie den Quellcode herunter.
- Extrahieren Sie die .zip-Datei in einen lokalen Ordner.
- Öffnen Sie die AspNet.Identity.MySQL-Lösung, und erstellen Sie sie.
Erstellen eines neuen MVC-Anwendungsprojekts aus der Vorlage
Klicken Sie mit der rechten Maustaste auf die Projektmappe AspNet.Identity.MySQL , und klicken Sie auf Hinzufügen, Neues Projekt
Wählen Sie im Dialogfeld Neues Projekt hinzufügendie Option Visual C# auf der linken Seite, dann Web und dann ASP.NET Webanwendung aus. Nennen Sie Ihr Projekt IdentityMySQLDemo; klicken Sie dann auf OK.
Wählen Sie im Dialogfeld Neues ASP.NET-Projekt die MVC-Vorlage mit den Standardoptionen (einschließlich einzelner Benutzerkonten als Authentifizierungsmethode) aus, und klicken Sie auf OK.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf Ihr IdentityMySQLDemo-Projekt, und wählen Sie NuGet-Pakete verwalten aus. Geben Sie im Dialogfeld Suchtext den Namen Identity.EntityFramework ein. Wählen Sie dieses Paket in der Ergebnisliste aus, und klicken Sie auf Deinstallieren. Sie werden aufgefordert, das Abhängigkeitspaket EntityFramework zu deinstallieren. Klicken Sie auf Ja, da wir dieses Paket für diese Anwendung nicht mehr verwenden werden.
Klicken Sie mit der rechten Maustaste auf das Projekt IdentityMySQLDemo, wählen Sie Hinzufügen, Referenz, Projektmappe, Projekte aus. Wählen Sie das AspNet.Identity.MySQL-Projekt aus, und klicken Sie auf OK.
Ersetzen Sie im Projekt IdentityMySQLDemo alle Verweise auf
using Microsoft.AspNet.Identity.EntityFramework;
durch
using AspNet.Identity.MySQL;
Legen Sie in IdentityModels.cs ApplicationDbContext so fest, dass es von MySqlDatabase abgeleitet wird, und schließen Sie einen Konstruktor ein, der einen einzelnen Parameter mit dem Verbindungsnamen verwendet.
public class ApplicationDbContext : MySQLDatabase { public ApplicationDbContext(string connectionName) : base(connectionName) { } public static ApplicationDbContext Create() { return new ApplicationDbContext("DefaultConnection"); } }
Öffnen Sie die Datei IdentityConfig.cs. Ersetzen Sie in der ApplicationUserManager.Create-Methode die Instanziierung von UserManager durch den folgenden Code:
var manager = new ApplicationUserManager( new UserStore<ApplicationUser>( context.Get<ApplicationDbContext>() as MySQLDatabase));
Öffnen Sie die web.config-Datei, und ersetzen Sie die DefaultConnection-Zeichenfolge durch diesen Eintrag, der die hervorgehobenen Werte durch die Verbindungszeichenfolge der MySQL-Datenbank ersetzt, die Sie in den vorherigen Schritten erstellt haben:
<add name="DefaultConnection" connectionString="Database=IdentityMySQLDatabase; Data Source=<DataSource>;User Id=<UserID>;Password=<Password>" providerName="MySql.Data.MySqlClient" />
Führen Sie die App aus, und stellen Sie eine Verbindung mit der MySQL-Datenbank her.
Klicken Sie mit der rechten Maustaste auf das Projekt IdentityMySQLDemo, und wählen Sie Als Startprojekt festlegen aus.
Drücken Sie STRG+F5 , um die App zu erstellen und auszuführen.
Klicken Sie oben auf der Seite auf die Registerkarte Registrieren .
Geben Sie einen neuen Benutzernamen und ein neues Kennwort ein, und klicken Sie dann auf Registrieren.
Der neue Benutzer ist jetzt registriert und angemeldet.
Zurück zum MySQL Workbench-Tool, und überprüfen Sie den Inhalt der IdentityMySQLDatabase-Tabelle. Überprüfen Sie die Benutzertabelle auf die Einträge, während Sie neue Benutzer registrieren.
Nächste Schritte
Weitere Informationen zum Aktivieren anderer Authentifizierungsmethoden für diese App finden Sie unter Erstellen einer ASP.NET MVC 5-App mit Facebook- und Google OAuth2- und OpenID-Anmeldung.
Informationen zum Integrieren Ihrer Datenbank in OAuth und zum Einrichten von Rollen zum Einschränken des Zugriffs von Benutzern auf Ihre App finden Sie unter Bereitstellen einer sicheren ASP.NET MVC 5-App mit Mitgliedschaft, OAuth und SQL-Datenbank in Azure.