Basis-Pipeline für die Entwicklung eines SSO-Servers mit ASP.Net Identity und OpenIddict

Single Sign-On (SSO) hat sich zu einer Schlüssellösung im Bereich von Webanwendungen entwickelt und bietet Benutzern einen nahtlosen und effizienten Zugang zu mehreren Diensten mit einem einzigen Konto. Dieser Artikel dient als grundlegende Anleitung zur Entwicklung eines SSO-Servers auf Basis von ASP.Net Identity und OpenIddict. Ob Sie ein Entwickler sind, der die Benutzererfahrung verbessern möchte, oder ein IT-Experte, der den Zugriffsverwaltung vereinfachen möchte, begleiten Sie uns, während wir die Details der Implementierung von SSO aufdecken und Ihr Web-Ökosystem verbessern.

Diese Anleitung verwendet OpenIddict anstelle von Identity Server 4, da die Entwickler letzterer zu einem neuen Lizenzmodell gewechselt sind und die kostenlose Option nicht mehr für den Unternehmenseinsatz unterstützt wird.

Voraussetzungen: .NET 7

Projekterstellung:

Zunächst müssen wir eine neue ASP.NET Core Razor Pages-Anwendung mit der Option „Individual Authentication“ aktiviert erstellen.

ASP.NET Core Razor Pages-Anwendung erstellen

Nachdem Sie das Projekt erstellt haben, können Sie es ausführen, und es wird ein neuer Tab mit einem solchen Fenster in Ihrem Browser geöffnet.

Neues Fenster

Hinzufügen und Einrichten von OpenIddict:
Nun müssen wir die OpenIddict-Pakete zu Ihrer .csproj-Datei hinzufügen oder dies über den NuGet-Paket-Manager durchführen.

OpenIddict-Paket Hinzufügung
Erstellen Sie die folgenden Modelle AuthorizeViewModel und ErrorViewModel im Models-Ordner.
AuthorizeViewModel im Models-OrdnerErrorViewModel im Models-Ordner
Wir benötigen auch 2 Hilfsklassen: AsyncEnumerableExtensions und FormValueRequiredAttribute. Erstellen Sie diese im Ordner Helpers.
AsyncEnumerableExtensions
FormValueRequiredAttribute
Fügen Sie zu Views/_ViewImports.cshtml hinzu.
ViewImports.cshtml
Fügen Sie eine Seite Logout hinzu, um die Abmeldung zu bestätigen, unter Views/Authorization/Logout.cshtml.
Hinzufügung von der Logout-Seite
Fügen Sie die Seite Authorize hinzu, um die Systemabmeldung zu bestätigen, unter Views/Authorization/Authorize.cshtml.

Hinzufügung von der Authorize-Seite

Als Nächstes müssen wir die Datei Program.cs bearbeiten.

Fügen Sie options.UseOpenIddict() in der Konfiguration des Kontexts ein.

Hinzufügung von options.UseOpenIddict()

Fügen Sie die Integration von Quartz.Net in Ihre Anwendung ein, um wiederkehrende Aufgaben auszuführen.

Hinzufügung von der Integration von Quartz.Net

Nun ist es an der Zeit, OpenIddict einzurichten. Sie können die Beschreibung in den Screenshots sehen.

Konfiguration von OpenIddict

Sie können hier ein vollständiges Beispiel einer Konfigurationsdatei sehen.

Nun müssen wir benutzerdefinierte Controller hinzufügen, da OpenIddict diese nicht standardmäßig mitbringt, im Gegensatz zum Identity Server. Fertige Implementierungen für dieses Beispiel finden Sie hier und hier.

Erstellung eines Clients:

Nun müssen wir beim Start der Anwendung primäre Daten hinzufügen. Erstellen Sie dazu eine Datei namens Worker.cs.

Erstellung von Worker.cs Datei

Um die Daten zu initialisieren, fügen Sie diese Zeile zur Datei Program.cs hinzu.

Hinzufügen einer Zeile zur Datei Program.cs

Es ist an der Zeit, die Migrationen hinzuzufügen und auf die Datenbank anzuwenden (standardmäßig verwendet das Projekt SqLite, Sie können jedoch problemlos zu einer beliebigen von EF Core unterstützten Datenbank wechseln).

Beispielbefehle zum Hinzufügen und Anwenden von Migrationen:

dotnet ef migrations add –project SsoSample\SsoSample.csproj –startup-project SsoSample\SsoSample.csproj –context SsoSample.Data.ApplicationDbContext –configuration Debug AddOpeniddict –output-dir Data\Migrations
dotnet ef database update –project SsoSample\SsoSample.csproj –startup-project SsoSample\SsoSample.csproj –context SsoSample.Data.ApplicationDbContext –configuration Debug 20231008224445_AddOpeniddict

Sobald die Migrationen erstellt sind, können Sie die Anwendung ausführen und Ihren Benutzer registrieren.

Um eine Plugin-Anwendung zu simulieren, verwenden wir Postman. Gehen Sie zu Postman und wechseln Sie zum Tab Authorization -> Configure New Token. Wählen Sie hier den Typ Oauth 2.0 aus und füllen Sie die Felder gemäß dem unten stehenden Beispiel aus.

Postman zur Simulation der Plugin-Anwendung

Klicken Sie auf „Get New Access Token“, ein Browserfenster wird geöffnet, in dem Sie aufgefordert werden, sich in Ihrem Konto anzumelden. Wenn Sie in diesem Stadium Fehler sehen, überprüfen Sie, ob Sie die korrekten Daten in der Datenbank initialisieren. Wenn alles gut gelaufen ist, werden Sie zurück zu Postman weitergeleitet.

Get New Access Token

Als Nächstes können Sie das empfangene Token anzeigen, das Sie verwenden können, um es an Ihre sichere API zu senden.

Zugangstoken verwalten

Beachten Sie, dass, wenn Sie das resultierende Token kopieren und es in jwt.io einfügen, Sie einen Fehler für ungültige Signatur erhalten, da das Payload von OpenIddict verschlüsselt ist. Für weitere Details lesen Sie dieses GitHub-Problem: https://github.com/openiddict/openiddict-core/issues/325

Einen Fehler für ungültige Signatur

Fazit

Die Implementierung von Single Sign-On (SSO) in Webanwendungen ist ein integraler Bestandteil moderner Autorisierungs- und Authentifizierungssysteme. Diese Technologie ermöglicht es Benutzern, auf mehrere Anwendungen mit einem einzigen Satz von Anmeldedaten zuzugreifen, was den Anmeldeprozess erheblich erleichtert und beschleunigt.

Die Vorteile von SSO sind offensichtlich:
• erhöhte Sicherheit
• verbesserte Benutzererfahrung
• Reduzierung der Belastung für Administratoren

Benutzer können sich einmal anmelden und automatisch auf verschiedene Anwendungen zugreifen, ohne ihre Anmeldeinformationen erneut eingeben zu müssen. Dies verringert das Risiko von Passwortlecks und vereinfacht das Management des Anwendungszugriffs.

In diesem Artikel haben wir eine schrittweise Anleitung zur Implementierung von SSO in Webanwendungen bereitgestellt. Sie können problemlos weitere Grant-Typen (implizit, Passwort usw.) zu diesem Beispiel hinzufügen, um noch mehr Arten von Anwendungen mit Ihrem SSO zu verbinden.

Die Implementierung von SSO kann eine Herausforderung sein, aber mit dieser Anleitung haben Sie alle Anweisungen für eine erfolgreiche Umsetzung. Denken Sie daran, dass Sicherheit oberste Priorität haben sollte. Folgen Sie bewährten Methoden für die Einrichtung und Sicherung Ihres SSO-Systems.

Erkunden Sie einen weiteren Artikel von unseren Experten: Optimierung Von Jenkins-Pipelines Durch Shared Libraries

Kontakt
Kontakt


    Insert math as
    Block
    Inline
    Additional settings
    Formula color
    Text color
    #333333
    Type math using LaTeX
    Preview
    \({}\)
    Nothing to preview
    Insert