Dela via


IdentityServer för molnbaserade program

Tips

Det här innehållet är ett utdrag från eBook, Architecting Cloud Native .NET Applications for Azure, som finns på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.

molnbaserade .NET-appar för Azure eBook-omslagsminiatyr.

IdentityServer är en autentiseringsserver som implementerar OpenID Connect -standarder (OIDC) och OAuth 2.0 för ASP.NET Core. Den är utformad för att ge ett vanligt sätt att autentisera begäranden till alla dina program, oavsett om de är webb-, intern-, mobil- eller API-slutpunkter. IdentityServer kan användas för att implementera enkel Sign-On (SSO) för flera program och programtyper. Den kan användas för att autentisera faktiska användare via inloggningsformulär och liknande användargränssnitt samt tjänstbaserad autentisering som vanligtvis omfattar tokenutfärdande, verifiering och förnyelse utan något användargränssnitt. IdentityServer är utformat för att vara en anpassningsbar lösning. Varje instans är vanligtvis anpassad för en enskild organisation och/eller en uppsättning programbehov.

Vanliga webbappsscenarier

Vanligtvis måste program ha stöd för vissa eller alla följande scenarier:

  • Mänskliga användare som har åtkomst till webbprogram med en webbläsare.
  • Mänskliga användare som kommer åt serverdelswebb-API:er från webbläsarbaserade appar.
  • Mänskliga användare på mobila/inbyggda klienter som har åtkomst till webb-API:er.
  • Andra program som har åtkomst till serverdelswebb-API:er (utan ett aktivt användar- eller användargränssnitt).
  • Alla program kan behöva interagera med andra webb-API:er, använda sin egen identitet eller delegera till användarens identitet.

Programtyper och scenarier

Bild 8–1. Programtyper och scenarier.

I vart och ett av dessa scenarier måste de exponerade funktionerna skyddas mot obehörig användning. Detta kräver vanligtvis att användaren eller huvudkontot autentiseras vid en begäran om en resurs. Den här autentiseringen kan använda ett av flera vanliga protokoll, till exempel SAML2p, WS-Fed eller OpenID Connect. Kommunikation med API:er använder vanligtvis OAuth2-protokollet och dess stöd för säkerhetstoken. Genom att separera dessa kritiska övergripande säkerhetsproblem och deras implementeringsinformation från själva programmen säkerställs konsekvens och säkerhet och underhåll. Att lägga ut dessa problem på en dedikerad produkt som IdentityServer hjälper kravet för varje program att lösa dessa problem själv.

IdentityServer tillhandahåller mellanprogram som körs i ett ASP.NET Core-program och lägger till stöd för OpenID Connect och OAuth2 (se specifikationer som stöds). Organisationer skulle skapa sin egen ASP.NET Core-app med hjälp av IdentityServer-mellanprogram för att fungera som STS för alla sina tokenbaserade säkerhetsprotokoll. IdentityServer-mellanprogrammet exponerar slutpunkter för att stödja standardfunktioner, inklusive:

  • Auktorisera (autentisera slutanvändaren)
  • Token (begär en token programmatiskt)
  • Upptäckt (metadata om servern)
  • Användarinformation (hämta användarinformation med en giltig åtkomsttoken)
  • Enhetsauktorisering (används för att starta enhetsflödesauktorisering)
  • Introspektion (tokenverifiering)
  • Återkallande (tokenåterkallelse)
  • Avsluta session (utlösa enkel utloggning i alla appar)

Komma igång

IdentityServer är tillgängligt:

Mer information om priser finns på den officiella produktens prissättningssida.

Du kan lägga till den i dina program med hjälp av dess NuGet-paket. Huvudpaketet är IdentityServer, som har laddats ned över fyra miljoner gånger. Baspaketet innehåller ingen kod för användargränssnittet och stöder endast minnesintern konfiguration. Om du vill använda den med en databas vill du också ha en dataprovider som Duende.IdentityServer.Storage, som använder Entity Framework Core för att lagra konfigurations- och driftdata för IdentityServer. För användargränssnittet kan du kopiera filer från lagringsplats för snabbstartsgränssnittet till ditt ASP.NET Core MVC-program för att lägga till stöd för inloggning och utloggning med IdentityServer-mellanprogram.

Konfiguration

IdentityServer stöder olika typer av protokoll och leverantörer av social autentisering som kan konfigureras som en del av varje anpassad installation. Detta görs vanligtvis i ASP.NET Core-programmets Program-klass (eller i klassen Startup i ConfigureServices-metoden). Konfigurationen omfattar att ange de protokoll som stöds och sökvägarna till de servrar och slutpunkter som ska användas. Bild 8–2 visar en exempelkonfiguration från Quickstart-projektet IdentityServer för ASP.NET Core-program.

// 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;
    });
}

Bild 8–2. Konfigurera IdentityServer.

JavaScript-klienter

Många molnbaserade program använder API:er på serversidan och omfattande klientprogram (SPA) på klientsidan. IdentityServer skickar en JavaScript-klient (oidc-client.js) via NPM som kan läggas till i SPA:er så att de kan använda IdentityServer för inloggning, utloggning och tokenbaserad autentisering av webb-API:er. Dessutom kan du använda en backend-för-frontend (BFF) som implementerar alla säkerhetsprotokollinteraktioner med tokenservern och IETF:s OAuth 2.0 för Browser-Based Applications spec.

Referenser