IdentityServer dla aplikacji natywnych dla chmury
Napiwek
Ta zawartość jest fragmentem książki eBook, Architekting Cloud Native .NET Applications for Azure, dostępnej na platformie .NET Docs lub jako bezpłatny plik PDF do pobrania, który można odczytać w trybie offline.
IdentityServer to serwer uwierzytelniania, który implementuje standardy OpenID Połączenie (OIDC) i OAuth 2.0 dla 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. Usługa IdentityServer może służyć do implementowania logowania jednokrotnego (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, którzy uzyskują dostęp do internetowych interfejsów API zaplecza z aplikacji opartych na przeglądarce.
- Użytkownicy na klientach mobilnych/natywnych, którzy uzyskują dostęp do internetowych interfejsów API zaplecza.
- Inne aplikacje uzyskują dostęp do internetowych interfejsów API zaplecza (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 wymaga to uwierzytelnienia użytkownika lub podmiotu zabezpieczeń wysyłającego żądanie dotyczące zasobu. To uwierzytelnianie może używać jednego z kilku typowych protokołów, takich jak SAML2p, WS-Fed lub OpenID Połączenie. 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, pomaga w wymaganiu dla każdej aplikacji, aby rozwiązać te problemy.
Usługa IdentityServer udostępnia oprogramowanie pośredniczące działające w aplikacji ASP.NET Core i dodaje obsługę Połączenie OpenID 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 IdentityServer4 jest dostępny w ramach podwójnej licencji:
- RPL — umożliwia korzystanie z wersji bezpłatnej IdentityServer4, jeśli jest używana w pracy typu open source
- Płatne — umożliwia korzystanie z maszyny IdentityServer4 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 IdentityServer4, 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. Aby używać jej z bazą danych, potrzebujesz również dostawcy danych, takiego jak IdentityServer4.EntityFramework, który używa programu Entity Framework Core do przechowywania danych konfiguracji i operacyjnych dla klasy IdentityServer. W przypadku interfejsu użytkownika możesz skopiować pliki z repozytorium interfejsu użytkownika szybkiego startu do aplikacji ASP.NET Core MVC, aby dodać obsługę logowania i wylogować się przy użyciu oprogramowania pośredniczącego IdentityServer.
Konfigurowanie
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 aplikacji Program
ASP.NET Core (lub w Startup
klasie 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ę pobraną z projektu interfejsu użytkownika Szybkiego startu IdentityServer4:
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"
};
});
}
}
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 narzędzia NPM, który można dodać do dostawców usług w celu umożliwienia im używania serwera IdentityServer do logowania, wylogowania i uwierzytelniania opartego na tokenach internetowych interfejsów API.