IdentityServer per applicazioni native del cloud
Suggerimento
Questo contenuto è un estratto dell'eBook Architecting Cloud Native .NET Applications for Azure, disponibile in .NET Docs o come PDF scaricabile gratuito che può essere letto offline.
IdentityServer è un server di autenticazione che implementa gli standard OpenID Connect (OIDC) e OAuth 2.0 per ASP.NET Core. È progettato per fornire un modo comune per autenticare le richieste a tutte le applicazioni, sia che si tratti di endpoint Web, nativi, mobili o API. IdentityServer può essere usato per implementare Single Sign-On (SSO) per più applicazioni e tipi di applicazione. Può essere usato per autenticare gli utenti effettivi tramite moduli di accesso e interfacce utente simili, nonché l'autenticazione basata sul servizio che in genere comporta il rilascio, la verifica e il rinnovo dei token senza alcuna interfaccia utente. IdentityServer è progettato per essere una soluzione personalizzabile. Ogni istanza viene in genere personalizzata in base alle esigenze di una singola organizzazione e/o set di applicazioni.
Scenari comuni di app Web
In genere, le applicazioni devono supportare alcuni o tutti gli scenari seguenti:
- Utenti umani che accedono alle applicazioni Web con un browser.
- Utenti umani che accedono alle API Web back-end dalle app basate su browser.
- Utenti umani nei client mobili/nativi che accedono alle API Web back-end.
- Altre applicazioni che accedono alle API Web back-end (senza un utente o un'interfaccia utente attiva).
- Qualsiasi applicazione potrebbe dover interagire con altre API Web, usando la propria identità o delegando all'identità dell'utente.
Figura 8-1. Tipi di applicazione e scenari.
In ognuno di questi scenari, la funzionalità esposta deve essere protetta da usi non autorizzati. Come minimo, questa operazione richiede in genere l'autenticazione dell'utente o dell'entità che effettua una richiesta per una risorsa. Questa autenticazione può usare uno dei diversi protocolli comuni, ad esempio SAML2p, WS-Fed o OpenID Connect. La comunicazione con le API usa in genere il protocollo OAuth2 e il relativo supporto per i token di sicurezza. Separando questi problemi critici di sicurezza trasversali e i relativi dettagli di implementazione dalle applicazioni stesse si garantisce la coerenza e migliora la sicurezza e la gestibilità. L'esternalizzazione di questi problemi a un prodotto dedicato come IdentityServer consente a ogni applicazione di risolvere questi problemi.
IdentityServer fornisce middleware in esecuzione all'interno di un'applicazione ASP.NET Core e aggiunge il supporto per OpenID Connect e OAuth2 (vedere specifiche supportate). Le organizzazioni creerebbero una propria app ASP.NET Core usando il middleware IdentityServer per fungere da servizio token di sicurezza per tutti i protocolli di sicurezza basati su token. Il middleware IdentityServer espone gli endpoint per supportare le funzionalità standard, tra cui:
- Autorizzare (autenticare l'utente finale)
- Token (richiedere un token a livello di codice)
- Individuazione (metadati relativi al server)
- Informazioni utente (ottenere informazioni utente con un token di accesso valido)
- Autorizzazione del dispositivo (utilizzata per avviare il flusso di autorizzazione del dispositivo)
- Introspezione (convalida del token)
- Revoca (revoca del token)
- Termina sessione (attiva la disconnessione singola in tutte le app)
Iniziare
IdentityServer è disponibile:
- Con una licenza community, che consente di usare il IdentityServer gratuito per piccole aziende e non profit (condizioni applicabili)
- A pagamento, che consente di usare il IdentityServer in uno scenario commerciale
Per altre informazioni sui prezzi, vedere la pagina dei prezzi del prodotto ufficiale.
È possibile aggiungerlo alle applicazioni usando i relativi pacchetti NuGet. Il pacchetto principale è IdentityServer, che è stato scaricato più di quattro milioni di volte. Il pacchetto di base non include codice dell'interfaccia utente e supporta solo la configurazione in memoria. Per usarlo con un database, è anche necessario un provider di dati come Duende.IdentityServer.Storage, che usa Entity Framework Core per archiviare i dati operativi e di configurazione per IdentityServer. Per l'interfaccia utente, è possibile copiare i file dal repository dell'interfaccia utente di avvio rapido nell'applicazione MVC core ASP.NET per aggiungere il supporto per l'accesso e disconnettersi usando il middleware IdentityServer.
Configurazione
IdentityServer supporta diversi tipi di protocolli e provider di autenticazione social che possono essere configurati come parte di ogni installazione personalizzata. Questa operazione viene in genere eseguita nella classe Program
dell'applicazione Core di ASP.NET (o nella classe Startup
nel metodo ConfigureServices
). La configurazione prevede la specifica dei protocolli supportati e dei percorsi per i server e gli endpoint che verranno usati. La figura 8-2 mostra una configurazione di esempio ricavata dalla guida introduttiva IdentityServer per il progetto di applicazioni 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;
});
}
Figura 8-2. Configurazione di IdentityServer.
Clienti JavaScript
Molte applicazioni native del cloud usano API lato server e applicazioni a pagina singola client avanzate nel front-end. IdentityServer fornisce un client JavaScript (oidc-client.js
) tramite NPM che può essere aggiunto agli SPA per consentire loro di usare IdentityServer per l'accesso, la disconnessione e l'autenticazione basata su token delle API Web. Inoltre, è possibile usare un back-end-for-frontend (BFF) di che implementa tutte le interazioni con il protocollo di sicurezza con il server token e l'OAuth 2.0 di IETF per Browser-Based specifica applicazioni.