IdentityServer per le applicazioni native del cloud
Suggerimento
Questo contenuto è un estratto dell'eBook, Progettazione di applicazioni .NET native del cloud per Azure, disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.
IdentityServer è un server di autenticazione che implementa gli standard OpenID Connessione (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, per dispositivi mobili o API. IdentityServer può essere usato per implementare l'accesso Single Sign-On (SSO) per più applicazioni e tipi di applicazioni. Può essere usato per autenticare gli utenti effettivi tramite moduli di accesso e interfacce utente simili, oltre che tramite l'autenticazione basata sul servizio che in genere comporta il rilascio, la verifica e il rinnovo dei token senza alcuna interfaccia utente. IdentityServer è progettato come 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 da app basate su browser.
- Utenti umani nei client per dispositivi mobili o 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, tramite la propria identità o delegando all'identità dell'utente.
Figura 8-1. Scenari e tipi di applicazione.
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 si migliora la sicurezza e la gestibilità. L'internazionalizzazione di questi problemi a un prodotto dedicato come IdentityServer consente a ogni applicazione di risolvere tali problemi.
IdentityServer fornisce middleware in esecuzione all'interno di un'applicazione ASP.NET Core e aggiunge il supporto per OpenID Connessione e OAuth2 (vedere le specifiche supportate). Le organizzazioni creano una propria app ASP.NET Core usando il middleware IdentityServer che funge 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)
- Individuare (metadati relativi al server)
- Informazioni utente (ottenere informazioni utente con un token di accesso valido)
- Autorizzazione del dispositivo (usata per avviare l'autorizzazione del flusso del dispositivo)
- Introspezione (convalida del token)
- Revoca (revoca di token)
- Sessione finale (attivare Single Sign-Out in tutte le app)
Introduzione
IdentityServer4 è disponibile in licenza doppia:
- RPL: consente di usare IdentityServer4 gratuitamente se usato nel lavoro open source
- A pagamento: consente di usare IdentityServer4 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 è IdentityServer4, che è stato scaricato più di quattro milioni di volte. Il pacchetto di base non include alcun codice dell'interfaccia utente e supporta solo la configurazione in memoria. Per usarlo con un database, è necessario anche un provider di dati come IdentityServer4.EntityFramework, 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 ASP.NET Core per aggiungere il supporto per l'accesso e disconnettersi usando il middleware IdentityServer.
Impostazione
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 ASP.NET Core (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 dal progetto dell'interfaccia utente di Avvio rapido 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"
};
});
}
}
Figura 8-2. Configurazione di IdentityServer.
Client JavaScript
Molte applicazioni native del cloud usano le API lato server e le applicazioni a pagina singola del client avanzate nel front-end. IdentityServer fornisce un client JavaScript (oidc-client.js
) tramite Monitoraggio prestazioni rete che può essere aggiunto alle applicazioni a pagina singola per consentire loro di usare IdentityServer per l'accesso, la disconnessione e l'autenticazione basata su token delle API Web.