IdentityServer dla aplikacji natywnych dla chmury
Napiwek
Ta treść jest fragmentem eBooka Architektura Cloud Native .NET Applications for Azure, dostępnej na .NET Docs lub jako bezpłatny plik PDF do pobrania, który można czytać offline.
Pobierz PDF
IdentityServer to serwer uwierzytelniania, który implementuje standardy OpenID Connect (OIDC) i OAuth 2.0 dla platformy ASP.NET Core. Jest ona przeznaczona do zapewnienia wspólnego sposobu uwierzytelniania żądań we wszystkich aplikacjach, niezależnie od tego, czy są to internetowe, natywne, mobilne, czy też punkty końcowe interfejsu API. Serwer IdentityServer może służyć do implementowania pojedynczego Sign-On (SSO) dla wielu aplikacji i typów aplikacji. Może służyć do uwierzytelniania rzeczywistych użytkowników za pośrednictwem formularzy logowania i podobnych interfejsów użytkownika, a także uwierzytelniania opartego na usłudze, które zwykle obejmuje wystawianie tokenów, weryfikację i odnawianie bez żadnego interfejsu użytkownika. Usługa IdentityServer została zaprojektowana w celu dostosowania rozwiązania. Każde wystąpienie jest zwykle dostosowane do potrzeb poszczególnych organizacji i/lub zestawu aplikacji.
Typowe scenariusze aplikacji internetowej
Zazwyczaj aplikacje muszą obsługiwać niektóre lub wszystkie następujące scenariusze:
- Użytkownicy, którzy uzyskują dostęp do aplikacji internetowych za pomocą przeglądarki.
- Użytkownicy uzyskujący dostęp do interfejsów API zaplecza sieci z aplikacji w przeglądarce.
- Użytkownicy korzystający z klientów mobilnych/natywnych uzyskujący dostęp do interfejsów programowania aplikacji (API) zaplecza.
- Inne aplikacje uzyskują dostęp do back-endowych interfejsów API sieciowych (bez aktywnego użytkownika lub interfejsu użytkownika).
- Każda aplikacja może wymagać interakcji z innymi internetowymi interfejsami API przy użyciu własnej tożsamości lub delegowania tożsamości użytkownika.
Rysunek 8–1. Typy aplikacji i scenariusze.
W każdym z tych scenariuszy uwidocznione funkcje muszą być zabezpieczone przed nieautoryzowanym użyciem. Co najmniej zwykle wymaga to uwierzytelnienia użytkownika lub podmiotu wysyłającego żądanie o dostęp do zasobu. To uwierzytelnianie może używać jednego z kilku typowych protokołów, takich jak SAML2p, WS-Fed lub OpenID Connect. Komunikacja z interfejsami API zwykle używa protokołu OAuth2 i jego obsługi tokenów zabezpieczających. Oddzielenie tych krytycznych kwestii związanych z zabezpieczeniami krzyżowymi i ich szczegółów implementacji z samych aplikacji zapewnia spójność i zwiększa bezpieczeństwo i łatwość konserwacji. Outsourcing tych problemów do dedykowanego produktu, takiego jak IdentityServer, zmniejsza potrzebę, aby każda aplikacja samodzielnie rozwiązywała te kwestie.
IdentityServer dostarcza middleware działające w aplikacji ASP.NET Core i dodaje obsługę protokołów OpenID Connect i OAuth2 (zobacz obsługiwane specyfikacje). Organizacje tworzą własną aplikację ASP.NET Core przy użyciu oprogramowania pośredniczącego IdentityServer, aby działać jako usługa STS dla wszystkich protokołów zabezpieczeń opartych na tokenach. Oprogramowanie pośredniczące IdentityServer uwidacznia punkty końcowe w celu obsługi standardowych funkcji, w tym:
- Autoryzowanie (uwierzytelnianie użytkownika końcowego)
- Token (programowe żądanie tokenu)
- Odnajdywanie (metadane dotyczące serwera)
- Informacje o użytkowniku (uzyskiwanie informacji o użytkowniku z prawidłowym tokenem dostępu)
- Autoryzacja urządzenia (używana do uruchamiania autoryzacji przepływu urządzeń)
- Introspection (weryfikacja tokenu)
- Odwołanie (odwołanie tokenu)
- Zakończ sesję (wyzwalaj wylogowanie jednokrotne we wszystkich aplikacjach)
Wprowadzenie
Serwer IdentityServer jest dostępny:
- Dzięki licencji społeczności, która umożliwia korzystanie z IdentityServer bezpłatnie dla małych firm i organizacji non-profit (obowiązują warunki)
- Usługa płatna, która umożliwia korzystanie z IdentityServer w scenariuszu komercyjnym.
Aby uzyskać więcej informacji na temat cen, zobacz oficjalną stronę cennika produktu .
Możesz dodać ją do aplikacji przy użyciu pakietów NuGet. Głównym pakietem jest IdentityServer, który został pobrany ponad cztery miliony razy. Pakiet podstawowy nie zawiera żadnego kodu interfejsu użytkownika i obsługuje tylko konfigurację w pamięci. pl-PL: Aby używać go z bazą danych, będziesz potrzebował również dostawcy danych, takiego jak Duende.IdentityServer.Storage, który korzysta z Entity Framework Core do przechowywania danych konfiguracyjnych i operacyjnych dla IdentityServer. W przypadku interfejsu użytkownika można kopiować pliki z repozytorium Quickstart UI do aplikacji ASP.NET Core MVC, aby dodać obsługę logowania i wylogowania przy użyciu oprogramowania middleware IdentityServer.
Konfiguracja
Usługa IdentityServer obsługuje różne rodzaje protokołów i dostawców uwierzytelniania społecznościowego, które można skonfigurować w ramach każdej instalacji niestandardowej. Zazwyczaj odbywa się to w klasie Program
aplikacji ASP.NET Core (lub w klasie Startup
w metodzie ConfigureServices
). Konfiguracja obejmuje określenie obsługiwanych protokołów i ścieżek do serwerów i punktów końcowych, które będą używane. Rysunek 8–2 przedstawia przykładową konfigurację z przewodnika szybkiego startu IdentityServer dla projektu aplikacji ASP.NET Core.
// 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;
});
}
Rysunek 8–2. Konfigurowanie maszyny wirtualnej IdentityServer.
Klienci języka JavaScript
Wiele aplikacji natywnych dla chmury korzysta z interfejsów API po stronie serwera i zaawansowanych aplikacji jednostronicowych klienta (SPA) na frontonie. Usługa IdentityServer dostarcza klienta JavaScript (oidc-client.js
) za pośrednictwem menedżera NPM, który można dodać do dostawców usług w celu umożliwienia im używania serwera IdentityServer do logowania, wylogowywania i uwierzytelniania opartego na tokenach internetowych interfejsów API. Ponadto można użyć backendu dla frontendu (BFF), który implementuje wszystkie interakcje protokołu zabezpieczeń z serwerem tokenów i OAuth 2.0 IETF dla specyfikacji Browser-Based Applications.
Bibliografia
- dokumentacja IdentityServer
- typy aplikacji
- klient OIDC dla JavaScript