Freigeben über


IdentityServer für cloudnative Apps

Tipp

Diese Inhalte sind ein Auszug aus dem E-Book „Architecting Cloud Native .NET Applications for Azure“, verfügbar in der .NET-Dokumentation oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.

Cloud Native .NET apps for Azure eBook cover thumbnail.

IdentityServer ist ein Authentifizierungsserver, der OpenID Connect (OIDC) und OAuth 2.0-Standards für ASP.NET Core implementiert. Er soll eine allgemeine Möglichkeit zum Authentifizieren von Anforderungen für alle Ihre Anwendungen bieten, unabhängig davon, ob es sich um Web-, native, mobile oder API-Endpunkte handelt. IdentityServer kann verwendet werden, um Single Sign-On (SSO) für mehrere Anwendungen und Anwendungstypen zu implementieren. Er kann verwendet werden, um tatsächliche Benutzer über Anmeldeformulare und ähnliche Benutzeroberflächen sowie die dienstbasierte Authentifizierung zu authentifizieren, die in der Regel Tokenausstellung, Überprüfung und Verlängerung ohne Benutzeroberfläche beinhaltet. IdentityServer ist als anpassbare Lösung konzipiert. Jede Instanz wird in der Regel den Anforderungen einer einzelnen Organisation und/oder einer Reihe von Anwendungen angepasst.

Allgemeine Web-App-Szenarien

In der Regel müssen Anwendungen einige oder alle der folgenden Szenarien unterstützen:

  • Menschliche Benutzer, die über einen Browser auf Webanwendungen zugreifen.
  • Menschliche Benutzer, die über browserbasierte Apps auf Back-End-Web-APIs zugreifen.
  • Menschliche Benutzer auf mobilen/nativen Clients, die auf Back-End-Web-APIs zugreifen.
  • Andere Anwendungen, die auf Back-End-Web-APIs zugreifen (ohne einen aktiven Benutzer oder eine aktive Benutzeroberfläche).
  • Jede Anwendung muss möglicherweise mit anderen Web-APIs interagieren, ihre eigene Identität verwenden oder sie an die Identität des Benutzers delegieren.

Application types and scenarios

Abbildung 8-1. Anwendungstypen und -szenarien.

In jedem dieser Szenarien muss die verfügbar gemachte Funktionalität vor nicht autorisierter Verwendung geschützt werden. Dies erfordert mindestens die Authentifizierung des Benutzers oder Prinzipals, der eine Anforderung für eine Ressource stellt. Diese Authentifizierung kann eines von mehreren gängigen Protokollen wie SAML2p, WS-Fed oder OpenID Connect verwenden. Bei der Kommunikation mit APIs wird in der Regel das OAuth2-Protokoll und dessen Unterstützung für Sicherheitstoken verwendet. Die Trennung dieser kritischen, bereichsübergreifenden Sicherheitsbelange und ihrer Implementierungsdetails von den Anwendungen selbst gewährleistet Konsistenz und verbessert die Sicherheit und Wartbarkeit. Das Auslagern dieser Belange in ein dediziertes Produkt wie IdentityServer hilft, die Anforderung zu erfüllen, dass jede Anwendung diese Probleme selbst lösen kann.

IdentityServer stellt Middleware bereit, die in einer ASP.NET Core-Anwendung ausgeführt wird und Unterstützung für OpenID Connect und OAuth2 hinzufügt (siehe Supported Specifications (Unterstützte Spezifikationen)). Organisationen würden ihre eigene ASP.NET Core-App mit IdentityServer-Middleware erstellen, um als STS für alle tokenbasierten Sicherheitsprotokolle zu fungieren. Die IdentityServer-Middleware macht Endpunkte verfügbar, um Standardfunktionen zu unterstützen, einschließlich:

  • Autorisieren (Authentifizieren des Endbenutzers)
  • Token (programmgesteuertes Anfordern eines Tokens)
  • Ermittlung (Metadaten zum Server)
  • Benutzerinformationen (Abrufen von Benutzerinformationen mit einem gültigen Zugriffstoken)
  • Geräteautorisierung (wird zum Starten der Geräteflussautorisierung verwendet)
  • Introspektion (Tokenüberprüfung)
  • Sperrung (Tokensperrung)
  • Sitzung beenden (einmaliges Abmelden für alle Apps auslösen)

Erste Schritte

IdentityServer4 ist unter dualer Lizenz verfügbar:

  • RPL: Ermöglicht Ihnen die kostenlose Verwendung von IdentityServer4 bei Verwendung in Open-Source-Arbeiten.
  • Kostenpflichtig: Ermöglicht Ihnen die Verwendung von IdentityServer4 in einem kommerziellen Szenario.

Weitere Informationen zu den Preisen finden Sie auf der offiziellen Preisseite des Produkts.

Sie können es Ihren Anwendungen mithilfe der NuGet-Pakete hinzufügen. Das Hauptpaket ist IdentityServer4, bislang über vier Millionen Mal heruntergeladen. Das Basispaket enthält keinen Benutzeroberflächencode und unterstützt nur die In-Memory-Konfiguration. Für die Verwendung mit einer Datenbank benötigen Sie auch einen Datenanbieter wie IdentityServer4.EntityFramework, der Entity Framework Core zum Speichern von Konfigurations- und Betriebsdaten für IdentityServer verwendet. Für die Benutzeroberfläche können Sie Dateien aus dem Schnellstart-UI-Repository in Ihre ASP.NET Core MVC-Anwendung kopieren, um Unterstützung für das Anmelden und Abmelden mithilfe der IdentityServer-Middleware hinzuzufügen.

Konfiguration

IdentityServer unterstützt verschiedene Arten von Protokollen und Anbietern für die Authentifizierung über soziale Profile, die im Rahmen jeder benutzerdefinierten Installation konfiguriert werden können. Dies geschieht in der Regel in der Program-Klasse der ASP.NET Core-Anwendung (oder in der Startup-Klasse in der ConfigureServices-Methode). Die Konfiguration umfasst die Angabe der unterstützten Protokolle und der Pfade zu den verwendeten Servern und Endpunkten. Abbildung 8-2 zeigt eine Beispielkonfiguration aus dem IdentityServer4-Schnellstart-UI-Projekt:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        // some details omitted
        services.AddIdentityServer();

          services.AddAuthentication()
            .AddGoogle("Google", options =>
            {
                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

                options.ClientId = "<insert here>";
                options.ClientSecret = "<insert here>";
            })
            .AddOpenIdConnect("demoidsrv", "IdentityServer", options =>
            {
                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                options.SignOutScheme = IdentityServerConstants.SignoutScheme;

                options.Authority = "https://demo.identityserver.io/";
                options.ClientId = "implicit";
                options.ResponseType = "id_token";
                options.SaveTokens = true;
                options.CallbackPath = new PathString("/signin-idsrv");
                options.SignedOutCallbackPath = new PathString("/signout-callback-idsrv");
                options.RemoteSignOutPath = new PathString("/signout-idsrv");

                options.TokenValidationParameters = new TokenValidationParameters
                {
                    NameClaimType = "name",
                    RoleClaimType = "role"
                };
            });
    }
}

Abbildung 8-2. Konfigurieren von IdentityServer.

JavaScript-Clients

Viele cloudnative Anwendungen verwenden serverseitige APIs und Rich-Client-Single-Page-Webanwendungen (Single Page Applications, SPAs) im Front-End. IdentityServer liefert einen JavaScript-Client (oidc-client.js) über NPM, der SPAs hinzugefügt werden kann, damit sie IdentityServer für die Anmeldung, Abmeldung und tokenbasierte Authentifizierung von Web-APIs verwenden können.

Referenzen