Udostępnij przez


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

Natywne aplikacje .NET dla chmury Azure - okładka miniatury eBooka.

Duende IdentityServer to struktura umożliwiająca tworzenie serwera uwierzytelniania zgodnego ze standardami OpenID Connect (OIDC) i OAuth 2.x przy użyciu ASP.NET Core.

Ma ona na celu zapewnienie 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. Może również działać jako brama federacyjna w celu ujednolicenia dostawców uwierzytelniania.

Usługa IdentityServer została zaprojektowana w celu dostosowania rozwiązania. Każde wystąpienie jest zwykle dostosowane do indywidualnej organizacji albo potrzeb określonego 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.

typy aplikacji i scenariusze

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 OAuth 2 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.

Usługa IdentityServer udostępnia oprogramowanie pośredniczące działające w aplikacji ASP.NET Core i dodaje obsługę programów OpenID Connect i OAuth 2.x (zobacz obsługiwane specyfikacje). Korzystając z usługi IdentityServer, organizacje mogą tworzyć własną aplikację ASP.NET Core przy użyciu oprogramowania pośredniczącego IdentityServer do działania jako serwer autoryzacji 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)
  • Przesyłane żądania autoryzacyjne (dla bezpieczniejszego procesu uwierzytelniania)

Wprowadzenie

Serwer IdentityServer jest dostępny:

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żesz skopiować pliki z repozytorium przykładów do aplikacji ASP.NET Core MVC, aby dodać obsługę logowania i wylogowania przy użyciu oprogramowania pośredniczącego 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 aplikacji Program ASP.NET Core. 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 używa interfejsów API po stronie serwera i zaawansowanych jednostronicowych aplikacji klienckich (SPA) we front-endzie, na przykład przy użyciu React, Angular lub Blazor WebAssembly. Wzorzec backend-for-frontend (BFF) jest używany w architekturze aplikacji internetowych dla tego typu klientów, co umożliwia przechowywanie tokenów poza zasięgiem przeglądarki. Ten wzorzec jest zgodny ze specyfikacją OAuth 2.0 programu IETF dla aplikacji Browser-Based.

Bibliografia