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 delle identità. Ma comprendi davvero i ruoli e gli attributi di questi token?
OIDC, OAuth 2.0 e token
Il Protocollo OpenID Connect, noto anche come OIDC, è emerso come uno standard ampiamente adottato per fornire un quadro fondamentale per la gestione delle identità. È un livello di autenticazione costruito sopra il ben noto 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 ID token introdotto.
Aspetta... Potresti aver sentito parlare dei token di accesso e dei 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 un ID token in OIDC?
Iniziamo con uno scenario pratico.
Immagina di sviluppare un'applicazione client-server tipica, e che comunichino tra loro attraverso API RESTful. Vuoi mantenere la maggior parte delle tue API private, permettendo solo ai client autorizzati di accedere. Avrai bisogno di un meccanismo per autenticare il cliente e autorizzare le richieste API al tuo server.
Idealmente, le tue API RESTful dovrebbero essere senza stato, il che significa che il server non dovrebbe memorizzare alcuna informazione sulla sessione del client. Ogni volta che arriva una richiesta valida, il server dovrebbe semplicemente rispondere con i dati richiesti. È qui che entrano in gioco i token. Quindi, che tipo di token dovresti usare in tal 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 token che il client trasmette al server quando richiede una risorsa API, tipicamente tramite l'intestazione della richiesta e in formato JWT.
Sul lato server, ogni volta che arriva una richiesta, il server deve solo convalidare se la richiesta in arrivo contiene un token di accesso valido. Il processo di convalida di solito include la decodifica del token JWT, la verifica della firma e del tempo di scadenza, oltre alla verifica del claim di ambito per garantire che il client abbia le autorizzazioni necessarie.
Tuttavia, potresti chiederti: Se la mia applicazione client può avere un token di accesso valido dopo un accesso riuscito, e usa il token di accesso per richiedere le API del server, non è sufficiente? Perché ho bisogno degli altri token?
In effetti, una domanda valida, e spieghiamola passo dopo passo.
Perché abbiamo bisogno dei token di aggiornamento?
Mentre tecnicamente i token di accesso soddisfano i requisiti minimi per far funzionare il sistema, a causa delle preoccupazioni sulla sicurezza, la validità dei token di accesso è solitamente molto breve (tipicamente un'ora). Quindi immagina se avessimo solo i token di accesso, gli utenti finali dovrebbero ri-autenticarsi ogni volta che il token di accesso scade. Per le moderne applicazioni web a pagina singola (SPA) e specialmente le applicazioni mobili, disconnettersi frequentemente è un'esperienza utente piuttosto dolorosa, anche se stiamo solo cercando di proteggere la loro sicurezza.
Pertanto, abbiamo bisogno di un equilibrio tra sicurezza del token e convenienza per l'utente. Ecco perché sono stati introdotti i token di aggiornamento.
Perché i token di aggiornamento possono avere una durata di vita più lunga?
I token di accesso sono utilizzati per accedere alle risorse API, quindi la loro natura a breve termine aiuta a ridurre il rischio di essere trafugati o compromessi. D'altra parte, poiché i token di aggiornamento sono utilizzati solo per scambiare nuovi token di accesso, non sono 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 dei token di aggiornamento
Poiché il token di aggiornamento è anche memorizzato sul lato client, garantire che non sia compromesso è 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 di default, il che significa che il server di autorizzazione emetterà 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 app web tradizionali: La rotazione del token di aggiornamento è intrinsecamente abilitata, 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, è fortemente raccomandato mantenere questa misura di protezione.
Cos'è un ID token e perché è importante?
L'ID token è una caratteristica unica di OIDC che fornisce informazioni di identità sull'utente autenticato.
Mentre i token di accesso sono utilizzati per accedere alle risorse protette e i token di aggiornamento sono utilizzati per ottenere nuovi token di accesso, gli ID token sono tipicamente utilizzati per memorizzare nella cache le informazioni dell'utente sul lato client, riducendo la necessità di effettuare richieste aggiuntive al server di autorizzazione per i dati dell'utente. In molti casi, è persino sicuro dire che avere l'ID token è equivalente a essere autenticati come utente.
Migliori pratiche per gestire i token
- Usa HTTPS: Usa sempre HTTPS per garantire la sicurezza della comunicazione tra il client e il server di autorizzazione. Questo previene che parti non autorizzate intercettino e rubino i token.
- Imposta il corretto tempo di scadenza del token: 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 del token di aggiornamento: Implementa la rotazione del token di aggiornamento per mitigare il rischio di fuga del token di aggiornamento.
- Usa il controllo degli accessi granulare: Usa scopi granulari per limitare i permessi dei token di accesso. Richiedi solo le autorizzazioni necessarie per l'applicazione client. Evita di usare scopi "tutti" o "amministratore" per bypassare la maggior parte dei controlli delle autorizzazioni a meno che non sia assolutamente necessario.
Riepilogo: Principali differenze tra i token di accesso, i token di aggiornamento e i 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 utente sicura e senza problemi.
- I token di accesso forniscono l'autorizzazione per accedere alle 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 sul 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.