Questa risposta è stata messa insieme dall'aiuto di due sviluppatori senior (John Brayton e David Jennes).
Il motivo principale per utilizzare un token di aggiornamento è ridurre la superficie di attacco.
Supponiamo che non ci sia un tasto di aggiornamento e passiamo attraverso questo esempio:
Un edificio ha 80 porte. Tutte le porte sono aperte con la stessa chiave. La chiave cambia ogni 30 minuti. Alla fine dei 30 minuti devo dare la vecchia chiave al keymaker e ottenere una nuova chiave.
Se sono l'hacker e ottengo la tua chiave, alla fine dei 30 minuti la spedirò al keymaker e riceverò una nuova chiave. Potrò continuamente aprire tutte le porte indipendentemente dal cambio di chiave.
Domanda: Durante i 30 minuti, quante opportunità di hacking ho avuto contro la chiave? Ho avuto 80 opportunità di hacking, ogni volta che hai usato la chiave (pensa a questo come fare una richiesta di rete e passare il token di accesso per identificarti). Quindi questa è una superficie di attacco 80X.
Ora passiamo allo stesso esempio, ma questa volta supponiamo che ci sia un tasto di aggiornamento.
Un edificio ha 80 porte. Tutte le porte sono aperte con la stessa chiave. La chiave cambia ogni 30 minuti. Per ottenere una nuova chiave, non riesco a passare il vecchio token di accesso. Devo solo passare la chiave di aggiornamento.
Se sono l'hacker e ottengo la tua chiave, posso usarla per 30 minuti, ma alla fine dei 30 minuti l'invio al keymaker non ha alcun valore. In tal caso, il keymaker direbbe semplicemente questo token di aggiornamento errato. Per poter estendere il mio hack dovrei hackerare il corriere al keymaker. Il corriere ha una chiave distinta (pensala come un token di aggiornamento).
Domanda: Durante i 30 minuti, quante opportunità di hacking ho avuto contro il tasto di aggiornamento? 80? No. Ho avuto solo 1 opportunità di hacking. Durante il tempo il corriere comunica con il keymaker. Quindi questa è una superficie d'attacco 1X. Ho avuto 80 opportunità di hacking contro la chiave, ma non vanno bene dopo 30 minuti.
Un server verificherebbe un token di accesso in base alle credenziali e alla firma (in genere) di un JWT.
Una perdita del token di accesso è errata, ma una volta scaduta non è più utile a un utente malintenzionato. Una perdita di token di aggiornamento è molto peggio, ma presumibilmente è meno probabile. (Penso che ci sia spazio per chiedersi se la probabilità di una perdita di token di aggiornamento sia molto inferiore a quella di una perdita di token di accesso, ma questa è l'idea.)
Il punto è che il token di accesso viene aggiunto a ogni richiesta effettuata, mentre un token di aggiornamento viene utilizzato solo durante il flusso di aggiornamento. Meno possibilità di un MITM di vedere il token
La frequenza aiuta un attaccante. Possibili perdite di cuore, come potenziali difetti di sicurezza in SSL, potenziali difetti di sicurezza nel client e potenziali difetti di sicurezza nel server.
Inoltre, se il server delle autorizzazioni è separato dal server delle applicazioni che elabora altre richieste client, quel server delle applicazioni non vedrà mai i token di aggiornamento. Vedrà solo token di accesso che non dureranno a lungo.
La compartimentazione è buona per la sicurezza.
Ultimo ma non meno importante vedere questa risposta fantastica
Di quale token di aggiornamento NON si tratta?
La possibilità di aggiornare / revocare il livello di accesso tramite i token di aggiornamento è un sottoprodotto della scelta di utilizzare i token di aggiornamento, altrimenti un token di accesso autonomo potrebbe essere revocato o avere il suo livello di accesso modificato quando scade e gli utenti ottengono un nuovo token