IdentityServer pro aplikace nativní pro cloud

Tip

Tento obsah je výňatek z eBooku, Architekting Cloud Native .NET Applications for Azure, který je k dispozici na webu Docs pro .NET nebo jako soubor PDF zdarma ke stažení, který si můžete přečíst offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

IdentityServer je ověřovací server, který implementuje standardy OpenID Připojení (OIDC) a OAuth 2.0 pro ASP.NET Core. Je navržená tak, aby poskytovala běžný způsob ověřování požadavků na všechny aplikace, ať už jde o webové, nativní, mobilní nebo koncové body rozhraní API. IdentityServer se dá použít k implementaci jednotného přihlašování (SSO) pro více aplikací a typů aplikací. Dá se použít k ověřování skutečných uživatelů prostřednictvím přihlašovacích formulářů a podobných uživatelských rozhraní a ověřování na základě služeb, které obvykle zahrnuje vystavování, ověřování a prodlužování platnosti tokenů bez uživatelského rozhraní. IdentityServer je navržený tak, aby byl přizpůsobitelným řešením. Každá instance je obvykle přizpůsobená tak, aby vyhovovala potřebám jednotlivých organizací nebo sady aplikací.

Běžné scénáře webových aplikací

Aplikace obvykle potřebují podporovat některé nebo všechny následující scénáře:

  • Uživatelé, kteří přistupují k webovým aplikacím pomocí prohlížeče
  • Uživatelé, kteří přistupují k back-endovým webovým rozhraním API z aplikací založených na prohlížeči
  • Lidé na mobilních nebo nativních klientech přistupující k back-endovým webovým rozhraním API.
  • Jiné aplikace, které přistupují k back-endovým webovým rozhraním (bez aktivního uživatele nebo uživatelského rozhraní).
  • Každá aplikace může potřebovat interakci s jinými webovými rozhraními API pomocí vlastní identity nebo delegování na identitu uživatele.

Application types and scenarios

Obrázek 8-1 Typy aplikací a scénáře.

V každém z těchto scénářů musí být vystavené funkce zabezpečené proti neoprávněnému použití. Minimálně to obvykle vyžaduje ověření uživatele nebo instančního objektu, který žádá o prostředek. Toto ověřování může používat jeden z několika běžných protokolů, jako je SAML2p, WS-Fed nebo OpenID Připojení. Komunikace s rozhraními API obvykle používá protokol OAuth2 a jeho podporu pro tokeny zabezpečení. Oddělení těchto důležitých problémů se zabezpečením a podrobností o jejich implementaci od samotných aplikací zajišťuje konzistenci a zlepšuje zabezpečení a udržovatelnost. Outsourcing těchto obav vyhrazeným produktům, jako je IdentityServer, pomáhá požadavkům každé aplikace řešit tyto problémy sama.

IdentityServer poskytuje middleware, který běží v aplikaci ASP.NET Core a přidává podporu openID Připojení a OAuth2 (viz podporované specifikace). Organizace by pomocí middlewaru IdentityServer vytvořily vlastní aplikaci ASP.NET Core, která bude fungovat jako služba tokenů zabezpečení pro všechny protokoly zabezpečení založené na tokenech. Middleware IdentityServer zveřejňuje koncové body pro podporu standardních funkcí, včetně:

  • Autorizace (ověření koncového uživatele)
  • Token (žádost o token prostřednictvím kódu programu)
  • Zjišťování (metadata o serveru)
  • Informace o uživateli (získání informací o uživateli s platným přístupovým tokenem)
  • Autorizace zařízení (používá se ke spuštění autorizace toku zařízení)
  • Introspection (ověření tokenu)
  • Odvolání (odvolání tokenu)
  • Ukončit relaci (aktivovat jednotné přihlašování napříč všemi aplikacemi)

Začínáme

IdentityServer4 je k dispozici v rámci duální licence:

  • RPL – umožňuje použít Open Source Server4 zdarma, pokud se používá v opensourcové práci.
  • Placené – umožňuje používat IdentityServer4 v komerčním scénáři.

Další informace o cenách najdete na oficiální stránce s cenami produktu.

Můžete ho přidat do svých aplikací pomocí jeho balíčků NuGet. Hlavním balíčkem je IdentityServer4, který byl stažen více než čtyři milionykrát. Základní balíček neobsahuje žádný kód uživatelského rozhraní a podporuje pouze konfiguraci v paměti. Pokud ho chcete použít s databází, budete také chtít zprostředkovatele dat, jako je IdentityServer4.EntityFramework, který používá Entity Framework Core k ukládání konfiguračních a provozních dat pro IdentityServer. Pro uživatelské rozhraní můžete zkopírovat soubory z úložiště uživatelského rozhraní pro rychlý start do aplikace ASP.NET Core MVC a přidat podporu pro přihlášení a odhlášení pomocí middlewaru IdentityServer.

Konfigurace

IdentityServer podporuje různé druhy protokolů a zprostředkovatelů sociálního ověřování, které je možné nakonfigurovat jako součást každé vlastní instalace. To se obvykle provádí ve třídě aplikace Program ASP.NET Core (nebo ve Startup třídě v ConfigureServices metodě). Konfigurace zahrnuje zadání podporovaných protokolů a cest k serverům a koncovým bodům, které se budou používat. Obrázek 8-2 ukazuje ukázkovou konfiguraci převzatou z projektu uživatelského rozhraní Pro rychlý start 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"
                };
            });
    }
}

Obrázek 8–2 Konfigurace IdentityServeru

Klienti JavaScriptu

Mnoho aplikací nativních pro cloud používá rozhraní API na straně serveru a bohaté jednostráňové klientské jednostráňové aplikace (SPA) na front-endu. IdentityServer dodává javascriptového klienta (oidc-client.js) prostřednictvím NPM, který je možné přidat do spA, aby mohl používat IdentityServer pro přihlášení, odhlášení a ověřování pomocí tokenů webových rozhraní API.

Reference