Teilen über


IdentityServer für cloudeigene Anwendungen

Tipp

Dieser Inhalt ist ein Auszug aus dem eBook, Architecting Cloud Native .NET Applications for Azure, verfügbar auf .NET Docs oder als kostenlose herunterladbare PDF, die offline gelesen werden kann.

Miniaturansicht des E-Books „Architecting Cloud Native .NET Applications for Azure“.

IdentityServer ist ein Authentifizierungsserver, der OpenID Connect (OIDC) und OAuth 2.0-Standards für ASP.NET Core implementiert. Es wurde entwickelt, um eine allgemeine Möglichkeit zum Authentifizieren von Anforderungen an alle Ihre Anwendungen bereitzustellen, unabhängig davon, ob sie Web-, systemeigene, mobile oder API-Endpunkte sind. IdentityServer kann verwendet werden, um single Sign-On (SSO) für mehrere Anwendungen und Anwendungstypen zu implementieren. Sie kann verwendet werden, um tatsächliche Benutzer über Anmeldeformulare und ähnliche Benutzeroberflächen sowie dienstbasierte Authentifizierung zu authentifizieren, die in der Regel Tokenausstellung, Überprüfung und Erneuerung ohne Benutzeroberfläche umfasst. IdentityServer ist für eine anpassbare Lösung konzipiert. Jede Instanz wird in der Regel entsprechend den Anforderungen einer einzelnen Organisation und/oder einer Gruppe von Anwendungen angepasst.

Allgemeine Web-App-Szenarien

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

  • Benutzer, die mit einem 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 aktive Benutzer oder Benutzeroberfläche).
  • Jede Anwendung muss möglicherweise mit anderen Web-APIs interagieren, die eigene Identität verwenden oder an die Identität des Benutzers delegieren.

Anwendungstypen und Szenarien

Abbildung 8-1. Anwendungstypen und Szenarien.

In jedem dieser Szenarien muss die verfügbar gemachte Funktionalität vor nicht autorisierter Verwendung gesichert 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. Die Kommunikation mit APIs verwendet in der Regel das OAuth2-Protokoll und seine Unterstützung für Sicherheitstoken. Durch die Trennung dieser kritischen grenzüberschreitenden Sicherheitsbedenken und deren Implementierungsdetails von den Anwendungen selbst wird Konsistenz gewährleistet und die Sicherheit und Verwendbarkeit verbessert. Das Outsourcing dieser Bedenken auf ein dediziertes Produkt wie IdentityServer hilft bei der Anforderung jeder Anwendung, diese Probleme selbst zu lösen.

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 unterstützte Spezifikationen). Organisationen würden ihre eigene ASP.NET Core-App mit IdentityServer-Middleware erstellen, um als STS für alle ihre 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 (verwendet zum Starten der Geräteflussautorisierung)
  • Introspektion (Tokenüberprüfung)
  • Widerruf (Token-Widerruf)
  • Sitzung beenden (Einmaliges Abmelden für alle Apps auslösen)

Erste Schritte

IdentityServer ist verfügbar:

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

Sie können sie Ihren Anwendungen mithilfe der NuGet-Pakete hinzufügen. Das Hauptpaket ist IdentityServer-, das über vier Millionen Mal heruntergeladen wurde. Das Basispaket enthält keinen Benutzeroberflächencode und unterstützt nur die In-Memory-Konfiguration. Um sie mit einer Datenbank zu verwenden, möchten Sie auch einen Datenanbieter wie Duende.IdentityServer.Storage, 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 die Anmeldung und Abmeldung mithilfe der IdentityServer-Middleware hinzuzufügen.

Konfiguration

IdentityServer unterstützt verschiedene Arten von Protokollen und Anbieter für die soziale Authentifizierung, die als Teil jeder benutzerdefinierten Installation konfiguriert werden können. Dies erfolgt 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 Servern und Endpunkten, die verwendet werden. Abbildung 8-2 zeigt eine Beispielkonfiguration aus dem Projekt IdentityServer-Schnellstart für ASP.NET-Core-Anwendungen.

// some details omitted
builder.Services.AddIdentityServer();

builder.Services.AddAuthentication(options =>
    {
        options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = "oidc";
    })
    .AddCookie("Cookies")
    .AddGoogle("Google", options =>
    {
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

        options.ClientId = "<insert here>";
        options.ClientSecret = "<insert here>";
    })
    .AddOpenIdConnect("oidc", options =>
    {
        options.Authority = "https://localhost:5001";

        options.ClientId = "web";
        options.ClientSecret = "secret";
        options.ResponseType = "code";

        options.Scope.Clear();
        options.Scope.Add("openid");
        options.Scope.Add("profile");

        options.MapInboundClaims = false; // Don't rename claim types

        options.SaveTokens = true;
    });
}

Abbildung 8-2. Konfigurieren von IdentityServer.

JavaScript-Clients

Viele cloudeigene Anwendungen verwenden serverseitige APIs und Rich-Client-Einzelseitenanwendungen (SINGLE Page Applications, SPAs) auf dem Front-End. IdentityServer liefert einen JavaScript-Client (oidc-client.js) über NPM, der SPAs hinzugefügt werden kann, um ihnen die Verwendung von IdentityServer für die Anmeldung, Abmelden und tokenbasierte Authentifizierung von Web-APIs zu ermöglichen. Darüber hinaus können Sie ein Back-End-for-Front-End (BFF) verwenden, das alle Sicherheitsprotokollinteraktionen mit dem Tokenserver und die IETF-Spezifikation OAuth 2.0 für browserbasierte Anwendungen implementieren.

Referenzen