Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.
ASP.NET Core: Authentifizierung nachrüsten
Im Artikel »Authentifizierung unter ASP.NET Core« haben wir gezeigt, wie Sie eine ASP.NET Core-Anwendung erstellen und diese direkt mit Funktionen für die Authentifizierung ausstatten. In anderen Artikeln wiederum haben wir Lösungen beschrieben, in denen wir zunächst ohne die Authentifizierung gestartet sind. Nun wollen wir beides zusammenführen. Aber was tun, wenn die Lösung noch nicht die für die Authentifizierung notwendigen Elemente enthält – nachrüsten oder neu mit Authentifizierung erstellen und dann die Lösung übertragen? Dieser Artikel zeigt den einfacheren Weg.
Voraussetzungen: .NET Core 2.1
Der Assistent zum Erstellen neuer ASP.NET Core-Anwendung liefert eine wirklich brauchbare Basis für neue Anwendungen. Noch schöner ist, dass er das Framework für die Realisierung einer Authentifizierung optional mitliefert und gleich noch die Links zur Registrierung und zur Anmeldung sowie die zur Verwaltung notwendigen hinzufügt.
Wenn Sie allerdings mit der Programmierung einer Lösung begonnen haben und nicht gleich die Option zum Hinzufügen der Authentifizierung aktiviert haben, stehen Sie erst einmal ohne Authentifizierung da. Und dazu gehören eine ganze Menge Elemente: die Datenbank zum Speichern der Benutzerdaten, die Verweise, einige Dateien mit den Seiten für Login, Registrierung und so weiter und letztlich auch noch die Einbindung der Links zum Einloggen und Registrieren in die Navigationsleiste der Startseite. Können wir diese Elemente so einfach nachrüsten und in eine bestehende ASP.NET Core-Anwendung integrieren? Oder macht es mehr Sinn, die Anwendung mit Authentifizierung neu zu erstellen und die bestehenden Elemente zu übertragen? Wenn Sie erst ein paar Seiten erstellt haben, können Sie sicher den letzteren Weg einschlagen. Je größer die Lösung allerdings schon gewachsen ist, desto geringer wird der Aufwand für das nachträgliche Einbauen der Authentifizierung gegenüber der anderen Alternative sein. Also schauen wir uns diesen Ansatz einmal genauer an.
Beispielprojekt erstellen
Als Erstes legen wir ein Beispielprojekt an. Dazu nutzen wir den Dialog Neues Projekt, wo wir den Eintrag Visual C#|Web|ASP.NET Core-Webanwendung auswählen (siehe Bild 1). Außerdem wollen wir unsere Lösung AuthNachruesten nennen.
Bild 1: Projekt erstellenIm nächsten Dialog behalten wir die Auswahl der Option Webanwendung bei. Hier wäre die Möglichkeit, über die Schaltfläche Authentifizierung ändern direkt die Authentifizierung hinzuzufügen. Dies wollen wir aber auslassen, da das Ziel des Artikels ja gerade die manuelle Nachrüstung der Authentifizierung ist (siehe Bild 2).
Bild 2: Auswahl ohne AuthentifizierungWenn Sie die Anwendung nun starten, sehen Sie nur die Standardnavigation (siehe Bild 3). Wir hätten gern, dass oben rechts Navigationseinträge angezeigt werden, mit denen sich Benutzer registrieren und einloggen können. Dies rüsten wir nun nach.
Bild 3: Start der Webanwendung ohne AuthentifizierungNotwendiges Paket nachinstallieren
Das Paket, dass die notwendigen Funktionen enthält, heißt Microsoft.AspNetCore.Identity.EntityFrameworkCore – es handelt sich dabei um ein NuGet-Paket. Diese können Sie leicht nachrüsten – beispielsweise über den dafür vorgesehenen NuGet-Paket-Manager.
Diesen starten Sie über den Kontextmenü-Eintrag NuGet-Pakete verwalten.... Es erscheint der Dialog aus Bild 4, wo Sie zum Bereich Durchsuchen wechseln und dort den Suchbegriff Microsoft.AspNetCore.Identity.EntityFrameworkCore eingeben. Haben Sie den entsprechenden Eintrag gefunden, installieren Sie diesen mit einem Klick auf die Schaltfläche Installieren.
Bild 4: Microsoft.AspNetCore.Identity.EntityFrameworkCore nachrüstenMicrosoft holt dann noch Ihre Zustimmung zur Lizenz ein, die Sie mit einem Klick auf die Schaltfläche Ich stimme zu quittieren. Die entsprechende Meldung zeigt gleich noch an, welche weiteren Bibliotheken mit dieser Bibliothek installiert werden (siehe Bild 5).
Bild 5: Microsoft.AspNetCore.Identity.EntityFrameworkCore kommt mit ein paar weiteren BibliothekenElemente für CodeFirst-Datenbank hinzufügen
Wenn wir mit der Authentifizierung arbeiten wollen, wir uns die Bibliotheken zur Verfügung stellen, haben wir mehrere Möglichkeiten, was die Speicherung der damit in Zusammenhang stehenden Daten angeht. Wir wollen es klassisch machen und die Daten in einer SQL Server-Datenbank speichern. Dabei gehen wir nach der Code First-Methode vor und erstellen erst ein paar Elemente im Projekt. Danach erstellen wir auf Basis dieser Objekte die notwendige Datenbank beziehungsweise lassen diese erstellen.
Genaugenommen bauen wir ein Entity Data Model auf, dessen Elemente wir in einem Unterverzeichnis namens Data im Projektordner anlegen. Das Verzeichnis Data legen Sie an, indem Sie den Kontextmenü-Eintrag Hinzufügen|Neuer Ordner des Projekt-Eintrags im Projektmappen-Explorer aufrufen.
Dem Ordner Data fügen Sie über den Kontextmenü-Eintrag Hinzufügen|Klasse eine neue Klasse hinzu, die Sie ApplicationUser nennen. Diese Klasse füllen Sie wie folgt:
Wir fügen also den Namespace Microsoft.AspNetCore.Identity hinzu und stellen die Klasse Application so ein, dass Sie von IdentityUser abgeleitet wird.
Auf die gleiche Weise fügen Sie eine weitere Klasse namens ApplicationDbContext hinzu, welche den Datenbank-Kontext für das Entity Data Model enthalten soll. Diese passen Sie wie folgt an:
Nun nehmen wir ein paar Änderungen an der Klasse Startup.cs vor. Wir benötigen einen Verweis auf den Namespace Microsoft.AspNetCore.Identity, einen auf Microsoft.EntityFrameworkCore sowie einen auf unseren Namespace mit dem Entity Data Model, also AuthNachruesten.Data. Schließlich fügen wir vor der Anweisung services.AddMvc()... die Methode services.AddDbContext... sowie die Methode services.AddIdentity... ein:
An dieser Stelle verwenden wir eine Verbindungszeichenfolge namens DefaultConnection. Diese ist allerdings noch nicht hinterlegt, was wir wie folgt in der Datei appsettings.json erledigen:
Datenbank erstellen
Um eine Datenbank auf Basis der beiden Klassen ApplicationDbContext.cs und ApplicationUser.cs zu erstellen, benötigen wir die Paket-Manager-Konsole. Diese blenden wir über den Menüeintrag Extras|NuGet-Paket-Manager|Paket-Manager-Konsole ein. Nun geben wir in der Paket-Manager-Konsole die folgende Anweisung ein (siehe Bild 6):
Bild 6: Initialisieren der MigrationDies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.