Cette réponse a été élaborée avec l'aide de deux développeurs seniors (John Brayton et David Jennes).
La principale raison d'utiliser un jeton d'actualisation est de réduire la surface d'attaque.
Supposons qu'il n'y ait pas de clé d'actualisation et passons par cet exemple:
Un bâtiment a 80 portes. Toutes les portes sont ouvertes avec la même clé. La clé change toutes les 30 minutes. À la fin des 30 minutes, je dois remettre l'ancienne clé au fabricant de clés et obtenir une nouvelle clé.
Si je suis le pirate informatique et que je récupère votre clé, à la fin des 30 minutes, je vais l'envoyer par courrier au fabricant de clés et obtenir une nouvelle clé. Je pourrai ouvrir toutes les portes en continu quel que soit le changement de clé.
Question: Pendant les 30 minutes, combien de possibilités de piratage ai-je eues contre la clé? J'ai eu 80 opportunités de piratage, chaque fois que vous avez utilisé la clé (pensez à cela comme faisant une demande réseau et en passant le jeton d'accès pour vous identifier). C'est donc une surface d'attaque 80X.
Passons maintenant au même exemple mais cette fois supposons qu'il y a une clé de rafraîchissement.
Un bâtiment a 80 portes. Toutes les portes sont ouvertes avec la même clé. La clé change toutes les 30 minutes. Pour obtenir une nouvelle clé, je ne peux pas transmettre l'ancien jeton d'accès. Je dois seulement passer la clé de rafraîchissement.
Si je suis le pirate informatique et que je récupère votre clé, je peux l'utiliser pendant 30 minutes, mais à la fin des 30 minutes, l'envoyer au keymaker n'a aucune valeur. Si je le fais, le keymaker dirait simplement ce mauvais jeton de rafraîchissement. Pour pouvoir étendre mon hack, je devrais pirater le courrier du keymaker. Le courrier a une clé distincte (pensez-y comme un jeton de rafraîchissement).
Question: Pendant les 30 minutes, combien de possibilités de piratage ai-je eues contre la touche d'actualisation? 80? Non, je n'ai eu qu'une seule possibilité de piratage. Pendant le temps, le courrier communique avec le keymaker. C'est donc une surface d'attaque 1X. J'ai eu 80 opportunités de piratage contre la clé, mais elles ne sont pas bonnes après 30 minutes.
Un serveur vérifierait un jeton d'accès basé sur les informations d'identification et la signature (généralement) d'un JWT.
Une fuite de jeton d'accès est mauvaise, mais une fois expirée, elle n'est plus utile à un attaquant. Un jeton de rafraîchissement qui fuit est bien pire, mais il est probablement moins probable. (Je pense qu'il est possible de se demander si la probabilité d'une fuite de jeton d'actualisation est beaucoup plus faible que celle d'une fuite de jeton d'accès, mais c'est l'idée.)
Le fait est que le jeton d'accès est ajouté à chaque demande que vous faites, alors qu'un jeton de rafraîchissement n'est utilisé que pendant le flux de rafraîchissement.
La fréquence aide un attaquant. Des failles de sécurité potentielles de type Heartbleed dans SSL, des failles de sécurité potentielles dans le client et des failles de sécurité potentielles dans le serveur permettent toutes des fuites.
En outre, si le serveur d'autorisation est distinct du serveur d'applications traitant d'autres demandes client, ce serveur d'applications ne verra jamais de jetons d'actualisation. Il ne verra que les jetons d'accès qui ne vivront pas longtemps.
La compartimentation est bonne pour la sécurité.
Dernier point mais non le moindre, voyez cette réponse impressionnante
De quel jeton d'actualisation n'est PAS question?
La possibilité de mettre à jour / révoquer le niveau d'accès via des jetons d'actualisation est un sous-produit du choix d'utiliser des jetons d'actualisation, sinon un jeton d'accès autonome pourrait être révoqué ou avoir son niveau d'accès modifié à son expiration et les utilisateurs obtiennent un nouveau jeton