Italiano
  • token
  • oidc
  • token di aggiornamento
  • token di accesso
  • token ID

Comprendere i token di accesso, i token di aggiornamento e i token ID nel protocollo OpenID Connect (OIDC)

Il protocollo OpenID Connect (OIDC) è emerso come uno standard ampiamente adottato per la gestione dell'identità. Ma comprendi davvero i ruoli e gli attributi di questi token?

Charles
Charles
Developer

OIDC, OAuth 2.0, e token

Il protocollo OpenID Connect, noto anche come OIDC, è emerso come uno standard ampiamente adottato per fornire un framework fondamentale per la gestione dell'identità. È uno strato di autenticazione costruito sopra il noto protocollo OAuth 2.0. Mentre OAuth 2.0 è semplicemente per l'autorizzazione delle risorse, OIDC è il protocollo che standardizza e rafforza l'autenticazione del client, con l'aiuto del nuovo token ID introdotto.

Aspetta... Potresti aver sentito parlare di token di accesso e token di aggiornamento nell'era di OAuth, e ora arriva il nuovo concetto in OIDC? Capisci davvero le differenze tra questi token?

Cosa sono i token di accesso, i token di aggiornamento e i token ID in OIDC?

Iniziamo con uno scenario pratico.

Immagina di sviluppare una tipica applicazione client-server, e che comunichino tra loro tramite RESTful API. Vuoi mantenere la maggior parte delle tue API private, consentendo l'accesso solo ai client autorizzati. Avrai bisogno di un meccanismo per autenticare il client e autorizzare le richieste API al tuo server.

Idealmente, le tue RESTful API dovrebbero essere stateless, il che significa che il server non dovrebbe memorizzare alcuna informazione di sessione del client. Ogni volta che arriva una richiesta valida, il server dovrebbe rispondere semplicemente con i dati richiesti. È qui che entrano in gioco i token. Quindi, che tipo di token dovresti usare in questo caso?

I token di accesso sono utilizzati per proteggere le tue API

In OAuth 2.0 e OIDC, ogni API protetta è trattata come una risorsa. Il token di accesso è il vero token che il client trasmette al server quando richiede una risorsa API, tipicamente tramite l'header della richiesta e nel formato JWT.

Sul lato server, ogni volta che arriva una richiesta, il server deve solo validare se la richiesta in arrivo porta un token di accesso valido. Il processo di validazione di solito include la decodifica del token JWT, la verifica della firma e del tempo di scadenza, così come la richiesta dello scope per assicurarsi che il client abbia i permessi necessari.

Tuttavia, potresti chiederti: Se la mia applicazione client può avere un token di accesso valido dopo un accesso riuscito e utilizzare il token di accesso per richiedere le API del server, non è sufficiente? Perché ho bisogno degli altri token?

Infatti, è una domanda valida, e spieghiamola passo dopo passo.

Perché abbiamo bisogno dei token di aggiornamento?

Sebbene tecnicamente i token di accesso soddisfino i requisiti minimi per far funzionare il sistema, tuttavia, a causa delle preoccupazioni sulla sicurezza, la validità dei token di accesso è di solito molto breve (tipicamente un'ora). Quindi immagina se avessimo solo i token di accesso, gli utenti finali dovrebbero riautenticarsi ogni volta che il token di accesso scade. Per le moderne applicazioni web a pagina singola (SPA) e specialmente per le applicazioni mobili, il logout frequente è un'esperienza utente piuttosto dolorosa, anche se stiamo solo cercando di proteggere la loro sicurezza.

Pertanto, abbiamo bisogno di un equilibrio tra la sicurezza dei token e la comodità degli utenti. Ecco perché i token di aggiornamento sono stati introdotti.

Perché i token di aggiornamento possono avere una durata più lunga?

I token di accesso sono utilizzati per accedere alle risorse API, quindi la loro natura a breve termine aiuta a mitigare il rischio di essere divulgati o compromessi. D'altro canto, poiché i token di aggiornamento sono utilizzati solo per scambiare nuovi token di accesso, non sono usati così frequentemente come i token di accesso e quindi il rischio di esposizione è ridotto. Pertanto, avere un periodo di validità più lungo è considerato accettabile per i token di aggiornamento.

Assicurare la sicurezza dei token di aggiornamento

Poiché il token di aggiornamento è anche memorizzato sul lato client, garantirne la non compromissione è impegnativo, specialmente per i client pubblici come le applicazioni web a pagina singola (SPA) e le app mobili.

In Logto, i token di aggiornamento hanno un meccanismo di rotazione automatico abilitato per impostazione predefinita, il che significa che il server di autorizzazione rilascerà un nuovo token di aggiornamento una volta che soddisfa i criteri:

  • Applicazioni a pagina singola: Riconosciute come client non vincolati dal mittente, queste app richiedono la rotazione del token di aggiornamento. Il tempo di vita del token di aggiornamento (TTL) non può essere specificato.
  • App native e tradizionali: La rotazione del token di aggiornamento è intrinsecamente abilitata, rinnovandosi automaticamente al raggiungimento del 70% del suo TTL. Scopri di più sulla rotazione del token di aggiornamento in Logto

Mentre hai ancora la possibilità di disabilitare la rotazione del token di aggiornamento nella pagina dei dettagli dell'applicazione nella console di amministrazione, è fortemente raccomandato mantenere questa misura di salvaguardia.

Cos'è un token ID e perché è importante?

Il token ID è una caratteristica unica di OIDC che fornisce informazioni di identità sull'utente autenticato.

Mentre i token di accesso sono utilizzati per accedere a risorse protette e i token di aggiornamento sono utilizzati per ottenere nuovi token di accesso, i token ID sono tipicamente utilizzati per memorizzare nella cache le informazioni dell'utente sul lato client, riducendo la necessità di effettuare ulteriori richieste al server di autorizzazione per i dati degli utenti. Nella maggior parte dei casi, è anche sicuro dire che avere il token ID è equivalente a utente autenticato.

Migliori pratiche per la gestione dei token

  • Usa HTTPS: Usa sempre HTTPS per proteggere la comunicazione tra il client e il server di autorizzazione. Questo previene che parti non autorizzate intercettino e rubino i token.
  • Imposta il tempo di scadenza del token correttamente: I token di accesso dovrebbero avere una vita breve per minimizzare il rischio di esposizione. I token di aggiornamento possono avere un periodo di validità più lungo.
  • Abilita la rotazione dei token di aggiornamento: Implementa la rotazione dei token di aggiornamento per mitigare il rischio di perdita dei token di aggiornamento.
  • Usa il controllo degli accessi a grana fine: Usa ambiti a grana fine per limitare i permessi dei token di accesso. Richiedi solo i permessi necessari per l'applicazione client. Evita di usare ambiti "all" o "admin" per aggirare la maggior parte dei controlli sui permessi a meno che assolutamente necessario.

Riepilogo: Principali differenze tra token di accesso, token di aggiornamento e token ID in OIDC

Nel protocollo OIDC, i token di aggiornamento, i token di accesso e i token ID lavorano insieme per fornire un'autenticazione sicura e senza interruzioni agli utenti.

  • I token di accesso forniscono l'autorizzazione per accedere a risorse protette.
  • I token di aggiornamento eliminano l'intervento dell'utente per nuovi token di accesso.
  • I token ID forniscono informazioni memorizzate nella cache sull'utente nel client, migliorando le prestazioni.

Comprendere il ruolo e l'importanza di questi token è cruciale per gli sviluppatori che implementano l'autenticazione OIDC nelle loro applicazioni.