IdentityServer pro aplikace nativní pro cloud
Spropitné
Tento obsah je výňatek z elektronické knihy Architektura cloud-native .NET aplikací pro Azure, která je k dispozici na .NET Docs nebo jako bezplatné PDF ke stažení, které si můžete přečíst offline.
IdentityServer je ověřovací server, který implementuje standardy OpenID Connect (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 lze použít k implementaci jednoho Sign-On (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 backendovým webovým rozhraním API z aplikací využívajících prohlížeč.
- 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.
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 principála, který žádá o zdroj. Toto ověřování může používat jeden z několika běžných protokolů, jako je SAML2p, WS-Fed nebo OpenID Connect. 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 problémů na specializované produkty, jako je IdentityServer, snižuje potřebu každé aplikace řešit tyto problémy samostatně.
IdentityServer poskytuje middleware, který běží v aplikaci ASP.NET Core a přidává podporu openID Connect a OAuth2 (viz podporované specifikace). Organizace by vytvořily vlastní aplikaci ASP.NET Core pomocí middlewaru IdentityServer, která bude fungovat jako bezpečnostní tokenový server pro všechny jejich 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
IdentityServer je k dispozici:
- S komunitní licencí, která umožňuje používat IdentityServer zdarma pro malé společnosti a neziskové organizace (podmínky platí)
- Placené, což vám umožní používat IdentityServer 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í balíček je IdentityServer, 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 chtít také zprostředkovatele dat, jako je Duende.IdentityServer.Storage, 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í 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ě Program
aplikace ASP.NET Core (nebo ve třídě Startup
v metodě ConfigureServices
). 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 zobrazuje příklad konfigurace z IdentityServer Quickstartu pro projekt aplikací 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;
});
}
obrázek 8–2. Konfigurace IdentityServeru
Klienti JavaScriptu
Mnoho aplikací nativních pro cloud používá rozhraní API na straně serveru a bohaté klientské jednostránkové aplikace (SPA) na front-endu. IdentityServer dodává JavaScriptového klienta (oidc-client.js
) prostřednictvím NPM, který lze přidat do aplikací typu SPA, aby mohly používat IdentityServer k přihlašování, odhlašování a ověřování na základě tokenu webových rozhraní API. Kromě toho můžete použít backend-pro-frontend (BFF), který implementuje všechny interakce protokolu zabezpečení se serverem tokenů a OAuth 2.0 IETF pro specifikaci Browser-Based Applications.
Odkazy
- Dokumentace k IdentityServeru
- typy aplikací
- JavaScript OIDC klient