Comprendere i token di aggiornamento, i token di accesso e i token ID nel protocollo OIDC
Il protocollo OpenID Connect (OIDC) è emerso come uno standard ampiamente adottato per la gestione delle identità. Ma capisci veramente i ruoli e gli attributi di questi token?
Introduzione
Il protocollo OpenID Connect, noto anche come OIDC, è emerso come uno standard ampiamente adottato per fornire un framework fondamentale per la gestione delle identità. È uno strato di autenticazione costruito sulla ben nota protocollo OAuth 2.0. Mentre OAuth 2.0 è solo 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 del token di aggiornamento e del token di accesso nell' era OAuth, e ora ecco un nuovo concetto in OIDC? Capisci veramente le differenze tra questi token?
Logto, la nostra soluzione completa di gestione dell' identità e dell' accesso del cliente (CIAM), è costruita sulla base del protocollo OIDC. Nella nostra comunità, una delle domande più frequenti dai nostri utenti è:
Quali sono le differenze tra un token di aggiornamento, un token di accesso e un token ID?
Quindi in questo post, ci addentreremo negli aspetti chiave dei token OIDC, illuminando anche come Logto migliora l'esperienza dello sviluppatore.
Cominciamo da uno scenario pratico
Immagina di lavorare su un' applicazione client-server tipica, e che comunicano tra loro tramite API RESTful. Vuoi mantenere la maggior parte delle tue API private, consentendone l'accesso solo ai client autorizzati. Allora potresti venirti in mente la prima domanda:
Quale tipo di token ho bisogno per proteggere la mia API?
La risposta rapida è: Token di accesso.
In OIDC, ogni API protetta è trattata come una risorsa. Il token di accesso è la credenziale che il client trasmette al server quando richiede una risorsa API, tipicamente tramite l' header della richiesta. Dal lato server, ogni volta che arriva una richiesta, il server deve solo validare se la richiesta in arrivo porta un token di accesso valido.
Tuttavia, potresti chiederti: Se la mia applicazione client può avere un token di accesso valido dopo un login di successo, e usare il token di accesso per richiedere le API del server, non è sufficiente? Perché ho bisogno di token di aggiornamento e token ID?
Infatti, una domanda valida, e spieghiamolo passo dopo passo.
Perché abbiamo bisogno di token di aggiornamento?
Mentre tecnicamente i token di accesso soddisfano i requisiti minimi per far funzionare il sistema, tuttavia, a causa di preoccupazioni di sicurezza la validità dei token di accesso è solitamente molto breve (tipicamente un'ora). Quindi immagina se abbiamo solo token di accesso, gli utenti finali dovranno ri-autenticarsi ogni volta che il token di accesso scade. Per le moderne applicazioni web a pagina singola e soprattutto per le applicazioni mobili, uscire frequentemente è un'esperienza utente piuttosto dolorosa, anche se stiamo solo cercando di proteggere la loro sicurezza utente.
Pertanto, abbiamo bisogno di un equilibrio tra la sicurezza del token e la comodità dell'utente. Ecco perché OIDC introduce i token di aggiornamento.
Perché i token di aggiornamento possono avere una durata maggiore?
I token di accesso vengono utilizzati per accedere alle risorse API, quindi la loro natura di breve durata aiuta a mitigare il rischio di essere diffusi o compromessi. D'altro canto, poiché i token di aggiornamento vengono utilizzati solo per scambiare nuovi token di accesso, non vengono utilizzati con la stessa frequenza dei 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.
Garantire la sicurezza del token di aggiornamento
Poiché il token di aggiornamento è anch'esso memorizzato sul lato client, garantire la loro non compromissione è una sfida, soprattutto per i client pubblici come le applicazioni web a pagina singola (SPA).
In Logto, i token di aggiornamento hanno un meccanismo di rotazione automatico abilitato per impostazione predefinita, il che significa che il server di autorizzazione emetterà un nuovo token di aggiornamento una volta che soddisfa i criteri:
- Applicazioni a singola pagina: Riconosciute come client non vincolati al mittente, queste applicazioni impongono la rotazione del token di aggiornamento. Il tempo di vita (TTL) del token di aggiornamento non può essere specificato.
- App native e app web tradizionali: La rotazione del token di aggiornamento è abilitata di default, rinnovandosi automaticamente al raggiungimento del 70% del suo TTL. Scopri di più
Mentre hai ancora l'opzione di disabilitare la rotazione del token di aggiornamento sulla pagina dei dettagli dell'applicazione nella console di amministrazione, si raccomanda vivamente di mantenere questa misura di salvaguardia.
L'essenza del token ID
Il token ID consente al client di ottenere informazioni di base sull'utente senza richiedere al server.
Il token ID è un token Web JSON (JWT) che contiene rivendicazioni utente come nome utente, email, immagine avatar, ecc. È firmato dal server di autorizzazione e può essere verificato e decodificato dal client offline. Questo è particolarmente utile per le moderne applicazioni web a pagina singola, e app mobili, dove il client può memorizzare nella cache il token ID e usarlo per determinare lo stato di autenticazione dell'utente, il che aiuta notevolmente le prestazioni complessive e l'esperienza utente.
È importante notare anche che i token ID non vengono utilizzati per autorizzare l'accesso a risorse protette; è quello il ruolo dei token di accesso.
In Logto, utilizziamo anche il token ID nei nostri SDK per aiutare a determinare lo stato di autenticazione sul lato client. Per esempio, nei nostri SDK JS, puoi vedere:
Tuttavia, come già accennato, il flag isAuthenticated
dell' SDK del client è solo uno stato memorizzato nella cache del client. Lo stato di autenticazione in tempo reale deve ancora essere determinato dal server, attraverso la validazione dei token di aggiornamento e di accesso.
Forniamo anche una funzione getUserClaims()
nei nostri SDK per aiutarti a decodificare il token ID e ottenere le rivendicazioni utente. Tuttavia, lo stato memorizzato nella cache non viene aggiornato fino a quando l'utente non effettua nuovamente l'accesso.
Se vuoi ottenere informazioni utente in tempo reale dal server OIDC, usa fetchUserInfo()
.
I vantaggi e le caratteristiche di Logto
Logto è costruito seguendo rigorosamente il protocollo OIDC, fornendo allo stesso tempo funzionalità e vantaggi aggiuntivi per gli sviluppatori e le aziende:
- SDK Convenienti: Gli SDK Logto semplificano la gestione dei token per te. Non devi memorizzare manualmente il tuo token di aggiornamento e token di accesso. Chiami semplicemente
getAccessToken()
ogni volta e l' SDK cercherà sempre di riutilizzare il token di accesso memorizzato, o di rinnovarlo automaticamente se è scaduto. - Rotazione del token di aggiornamento: Logto impone un meccanismo di rotazione del token di aggiornamento per garantire che il tuo token di aggiornamento venga sempre rinnovato dopo che è stato consumato, il che riduce il rischio di essere divulgato o compromesso. Anche se puoi ancora disabilitarlo nella console di amministrazione, ma è fortemente raccomandato di mantenerlo attivo.
- Prestazioni ottimizzate: Con l' aiuto dei token ID, puoi sempre ottenere informazioni di base sull'utente senza richiedere al server. Sfrutta lo stato
isAuthenticated
e la funzionegetIdTokenClaims()
forniti dagli SDK Logto per verificare lo stato di autenticazione dell'utente e decodificare le rivendicazioni utente sul lato client. - Sicurezza migliorata: Logto impone connessioni sicure tra il client e il server di autorizzazione usando HTTPS e TLS. Questo salvaguarda i tuoi token contro potenziali furti da parte di terze parti non autorizzate e garantisce la sicurezza del tuo sistema.
Conclusione
Nel protocollo OIDC, i token di aggiornamento, i token di accesso e i token ID lavorano insieme per fornire un' autenticazione utente sicura e fluida.
- I token di aggiornamento eliminano l' intervento dell' utente per nuovi token di accesso.
- I token di accesso forniscono l' autorizzazione per accedere a risorse protette.
- I token ID forniscono informazioni utente memorizzate nella cache sul client, migliorando le prestazioni.
La comprensione del ruolo e dell' importanza di questi token è fondamentale per gli sviluppatori che implementano l' autenticazione OIDC nelle loro applicazioni.
Scegliendo Logto, sviluppatori e aziende possono sbloccare tutto il potenziale di tali funzionalità OIDC, integrare sistemi di autenticazione robusti e sicuri che proteggono i dati degli utenti e offrono un' esperienza utente fluida.