Qu'est-ce que la rotation des jetons de rafraîchissement et pourquoi est-elle importante ?
Plongeons-nous et discutons pourquoi la rotation des jetons de rafraîchissement est un moyen efficace de protéger la sécurité de vos jetons de rafraîchissement.
Qu'est-ce qu'un jeton de rafraîchissement ?
Le jeton de rafraîchissement est un type spécial de jeton utilisé pour obtenir un nouveau jeton d'accès lorsque le jeton d'accès actuel expire. Consultez notre article précédent Comprendre les jetons dans OIDC pour en savoir plus.
Lors de l'introduction, nous avons également mentionné que dans Logto, afin de protéger la sécurité de votre jeton de rafraîchissement, nous avons imposé par défaut un mécanisme de « rotation des jetons de rafraîchissement ».
Mais qu'est-ce que la "rotation des jetons de rafraîchissement" exactement ? Comment cela profite-t-il à nos utilisateurs finaux ? Entrons dans le vif du sujet !
Qu'est-ce que la rotation des jetons de rafraîchissement ?
La rotation des jetons de rafraîchissement est un mécanisme qui invalide le jeton de rafraîchissement précédent et en émet un nouveau lorsque le jeton de rafraîchissement est utilisé pour obtenir un nouveau jeton d'accès. Ce mécanisme garantit que le jeton de rafraîchissement est renouvelé avant son expiration.
Pourquoi avons-nous besoin de la rotation des jetons de rafraîchissement ?
Les jetons de rafraîchissement ont une durée de vie prolongée, généralement de plusieurs semaines, voire plusieurs mois. Et puisque nous pouvons obtenir de nouveaux jetons d'accès par le biais de jetons de rafraîchissement, le jeton de rafraîchissement devient également une cible attrayante pour les attaquants. Par conséquent, selon OAuth 2.0 BCP, le serveur d'autorisation doit prendre l'une des mesures suivantes pour prévenir de telles attaques.
- Émettre des jetons de rafraîchissement contraints à l'émetteur : le client signe et fournit une signature (
Sec-Token-Binding
) dans l'en-tête de la demande de rafraîchissement, de sorte que le jeton de rafraîchissement émis soit cryptographiquement lié à un client spécifique. Cependant, seuls certains clients natifs sont aujourd'hui contraints à l'émetteur, et la plupart des SPAs modernes et des clients mobiles sont publics. - Rotation des jetons de rafraîchissement : le serveur d'autorisation émet un nouveau jeton de rafraîchissement (généralement lors de l'échange d'un nouveau jeton d'accès) et invalide le précédent. Cela atténue le risque de fuite de jeton.
Bonnes pratiques pour mettre en œuvre la rotation des jetons de rafraîchissement
Dans Logto, lorsqu'un utilisateur se connecte avec succès, un objet Grant
sera d'abord créé dans la base de données et le jeton de rafraîchissement émis par la suite aura une référence grantId
et pointera vers le tout premier objet Grant.
Chaque fois qu'une rotation de jeton de rafraîchissement se produit, le jeton de rafraîchissement précédent sera marqué comme consommé, et le serveur d'autorisation Logto émettra un nouveau jeton de rafraîchissement avec le même grantId
.
Supposons que le jeton de rafraîchissement précédent soit divulgué, alors que ce soit le client légitime ou l'attaquant, l'un d'eux l'aurait utilisé pour échanger un jeton d'accès. Et peu importe qui l'a fait, le jeton de rafraîchissement divulgué aura déjà été roté et marqué comme consommé. Celui qui a utilisé le jeton de rafraîchissement consommé en second informera le serveur d'autorisation de la violation. Le serveur d'autorisation révoquera tous les jetons de rafraîchissement avec le même grantId
.
Dans le cas ci-dessus, après avoir déclenché l'alarme, le client légitime ne pourra se réauthentifier qu'à travers le flux de connexion pour obtenir un nouveau jeton de rafraîchissement. L'attaquant, quant à lui, perdra le contrôle de votre système et sera bloqué à l'extérieur.
Quand la rotation des jetons de rafraîchissement a-t-elle lieu ?
Dans Logto, le comportement par défaut d'une rotation de jeton de rafraîchissement est défini comme suit :
- Si le client est contraint à l'émetteur ou non public (par exemple, les applications web à rendu côté serveur), la rotation du jeton de rafraîchissement se produit lorsqu'il atteint 70 % de sa durée totale de vie (TTL).
- Si le client est un client public (par exemple, les applications web monopage), la rotation du jeton de rafraîchissement se produit chaque fois qu'il est utilisé pour échanger un jeton d'accès. La réponse à l'échange de jeton renverra à la fois un nouveau jeton d'accès et un nouveau jeton de rafraîchissement.
Comment puis-je activer/désactiver la rotation des jetons de rafraîchissement dans Logto ?
Dans la console d'administration Logto, allez à Console d'administration > Applications et sélectionnez l'application pour laquelle vous souhaitez basculer la rotation des jetons de rafraîchissement. Dans la page de détails de l'application, allez à l'onglet "Paramètres avancés" et descendez jusqu'en bas, vous trouverez l'interrupteur ainsi que d'autres paramètres utiles.
Si vous éteignez l'interrupteur, votre jeton de rafraîchissement ne sera jamais roté jusqu'à son expiration. Par conséquent, nous recommandons fortement d'activer toujours la rotation des jetons de rafraîchissement.
Récapitulatif : Qu'est-ce que la rotation des jetons de rafraîchissement et pourquoi est-elle importante ?
La rotation des jetons de rafraîchissement est une bonne pratique qui garantit la sécurité des jetons de rafraîchissement dans votre application. Elle invalide le jeton de rafraîchissement précédent et en émet un nouveau lorsque le jeton de rafraîchissement est utilisé pour obtenir un nouveau jeton d'accès. Ce mécanisme atténue le risque de fuite de jeton et garantit la sécurité de votre jeton de rafraîchissement.
Logto suit les meilleures pratiques de l'industrie et place toujours la sécurité des utilisateurs comme priorité absolue.
J'espère que cet article explique bien vos doutes sur le mécanisme de rotation des jetons de rafraîchissement. Faites-nous savoir s'il y a encore quelque chose d'obscur. Vos commentaires et suggestions sont toujours les bienvenus !
Essayez Logto dès aujourd'hui et adoptez une expérience d'authentification plus sûre.