Logo Logo
GitHub Designed by Logto

Che cos’è un token di accesso (access token)?

Un token di accesso (access token) è una credenziale, tipicamente una stringa di caratteri, utilizzata per accedere a risorse protette. Nel contesto di OAuth 2.0 e OpenID Connect (OIDC), i authorization server possono emettere token di accesso ai client (applicazioni) dopo un’autenticazione e autorizzazione riuscite.

Sebbene gli RFC per OAuth 2.0 e OIDC non specifichino i dettagli di implementazione dei token di accesso, ci sono due tipi comuni di token di accesso utilizzati nella pratica:

  • Token opaco : Una stringa casuale che non ha significato (“opaco”) per il client. Il client presenta il token al resource server, che valida il token con l’authorization server.
  • JSON Web Token (JWT) : Un token autonomo che contiene claim (ad esempio, ID utente, tempo di scadenza) con una firma digitale. Il resource server può validare il token senza effettuare una richiesta aggiuntiva all’authorization server.

Come funziona un token di accesso (access token)?

A seconda del tipo di token di accesso, il flusso di utilizzo di un token di accesso può variare.

Ecco un esempio semplificato di utilizzo di un token di accesso opaco:

Ecco un esempio semplificato di utilizzo di un JWT:

La differenza tra i due tipi di token di accesso è come il resource server valida il token:

  • Il resource server deve effettuare una richiesta aggiuntiva all’authorization server per validare un token opaco ogni volta che riceve un token.
  • Il resource server può validare un JWT senza effettuare una richiesta aggiuntiva all’authorization server perché il token contiene tutte le informazioni necessarie e il resource server può memorizzare nella cache la chiave pubblica dal JSON Web Key Set (JWKS) dell’authorization server.

I token di accesso sono tipicamente di breve durata e hanno un tempo di scadenza (ad esempio, 1 ora). I client devono richiedere un nuovo token di accesso quando il token corrente scade.

Quale tipo di token dovrei usare?

La scelta tra un token opaco e un JWT dipende dal caso d’uso e dai requisiti di sicurezza dell’applicazione. Ecco un confronto tra i due tipi di token:

Token OpacoJWT
FormatoStringa casualeOggetti JSON autonomi
PrestazioniRichiede una richiesta aggiuntivaValidazione più veloce
AutonomoNo
Dimensione del tokenPiù piccoloPiù grande
RevocaImmediataRichiede la scadenza del token o l’interazione con l’authorization server
EstensibilitàLimitataClaim personalizzati
Senza statoNo
SicurezzaRichiede la validazione del tokenRichiede la validazione della firma
StandardNoSì (RFC 7519)

Per ulteriori informazioni sulla scelta tra i due tipi di token, vedi Opaque token vs JWT .

I ruoli dell’authorization server e del resource server

Nella maggior parte dei casi, l’ Server di autorizzazione ha le seguenti responsabilità:

Potresti notare che l’authorization server non interpreta il significato del token di accesso. Ad esempio, il token di accesso può contenere uno scope read:orders, ma l’authorization server non sa cosa significhi lo scope. Il resource server è responsabile dell’interpretazione del token di accesso e dell’applicazione dell’ Controllo degli accessi in base agli scope del token. Vale a dire, il Server delle risorse di solito ha le seguenti responsabilità:

  • Valida i claim nel token di accesso (ad esempio, tempo di scadenza, resource indicator, scope).
  • Applica l’access control basato sui claim del token (di solito scope).
  • Fornisce le risorse protette se il token di accesso è valido.

Ciclo di vita del token di accesso

Il ciclo di vita di un token di accesso tipicamente coinvolge le seguenti fasi:

Vedi anche