Comprendre l'importance de la revendication de jeton "iat" et résoudre l'erreur "Invalid issued at time"
Dans cet article, nous allons explorer l'importance de la revendication "iat" dans le jeton d'identification et comment résoudre l'erreur "Invalid issued at time in ID token".
Comprendre l'importance de la revendication de jeton "iat" et résoudre l'erreur "Invalid issued at time"
Contexte
Dans notre communauté, de temps en temps, nous entendons nos utilisateurs parler de ce problème déroutant de "Invalid issued at time in the ID token". Nos utilisateurs se plaignent que "Ça fonctionnait hier mais soudainement ça ne fonctionne plus aujourd'hui" ou "Ça fonctionne sur cet ordinateur, mais pas sur un autre".
Dans cet article, nous allons explorer pourquoi ce problème survient dans Logto, et vous armer du savoir-faire pour le résoudre.
Introduction
Dans OAuth 2.0 et OpenID Connect (OIDC), les jetons d'identité jouent un rôle essentiel dans la transmission sécurisée des informations d'identité des utilisateurs entre les parties. L'une des revendications dans un jeton d'identité est appelée "iat" (issued-at-time), représentant le timestamp auquel le jeton d'identité a été émis par le serveur d'autorisation.
Alors pourquoi la revendication "iat" est-elle importante ?
- Fraîcheur et expiration du jeton : La revendication "iat" fournit une information cruciale pour évaluer la fraîcheur d'un jeton d'identité. En comparant le timestamp "iat" avec l'heure actuelle, les parties de confiance peuvent déterminer à quel point le jeton a été émis récemment. Cette information est précieuse pour les applications qui ont besoin de garantir l'utilisation d'informations d'identité à jour.
- Atténuer les attaques par rejeu : La revendication "iat" joue un rôle essentiel dans l'atténuation des attaques par rejeu. Dans une attaque par rejeu, un adversaire tente de réutiliser un jeton précédemment intercepté. La revendication "iat" aide à détecter de telles attaques en permettant à la partie de confiance de définir une fenêtre de tolérance pour l'âge du jeton. Les jetons hors de cette fenêtre peuvent être considérés comme invalides.
- Imposer des politiques d'utilisation des jetons : Les applications imposent souvent des politiques sur l'âge maximum autorisé d'un jeton d'identité pour des raisons de sécurité. La revendication "iat" permet aux parties de confiance d'imposer ces politiques, garantissant que les jetons sont consommés dans un délai spécifié. Cela aide à minimiser le risque associé à l'utilisation de jetons obsolètes.
- Prise en charge de la révocation des jetons : Dans certains scénarios, un serveur d'autorisation peut avoir besoin de révoquer des jetons émis. La revendication "iat" est essentielle dans les processus de révocation de jetons en fournissant un timestamp clair pour l'émission du jeton. Elle simplifie l'identification et la révocation de jetons spécifiques en fonction de leur temps d'émission.
Meilleures pratiques pour gérer la revendication "iat"
- Valider la revendication "iat" : Les parties de confiance devraient toujours valider la revendication "iat" pour s'assurer qu'elle s'inscrit dans une plage acceptable. Cette plage peut varier en fonction des exigences de sécurité spécifiques de l'application.
- Tenir compte du décalage d'horloge : Permettre un certain degré de décalage d'horloge lors de la comparaison du timestamp "iat" avec l'heure actuelle. Le décalage d'horloge prend en compte d'éventuelles différences de temps entre le serveur d'autorisation et la partie de confiance.
- Définir des politiques d'expiration des jetons : Tirer parti de la revendication "iat" en conjonction avec la revendication "exp" (expiration time) pour imposer des politiques d'utilisation des jetons complètes, renforçant ainsi la posture globale de sécurité de l'application.
Dépannage
Maintenant, la cause première de la fameuse erreur "Invalid issued at time" est presque claire.
Afin d'atténuer les attaques par rejeu et de prendre en compte le décalage d'horloge, Logto avait précédemment défini une fenêtre de tolérance de 60 secondes pour les jetons d'identité. Toute partie de confiance ayant une différence de temps de plus de 60 secondes par rapport à l'heure mondiale est considérée potentiellement à risque et échouera à la validation du jeton d'identité. D'où l'erreur "Invalid token at time".
Cependant, dans la vie réelle, le décalage d'horloge se produit, parfois votre ordinateur ne parvient pas à se connecter au serveur de temps mondial pour synchroniser l'heure de l'ordinateur. Parfois, le serveur d'autorisation est désynchronisé. Parfois, pire encore, les deux sont désynchronisés.
De plus, dans les scénarios SSO, les différences de temps entre divers clients et le fournisseur SSO peuvent être encore plus grandes.
Solution
Afin d'atténuer la douleur et d'envisager des mesures de sécurité, Logto a maintenant augmenté la tolérance "iat" de 60 secondes à 5 minutes pour les authentifications non-SSO, et 10 minutes pour les scénarios SSO.
Pendant ce temps, vous pouvez vérifier si votre horloge de l'ordinateur est synchronisée avec l'heure mondiale en utilisant simplement ce site outil pratique : https://time.is Synchronisez votre heure manuellement ou changez de serveur de temps, pour vous assurer que la différence de temps est toujours dans notre fenêtre de tolérance.
Conclusion
La revendication "iat" dans les jetons d'identité est un élément crucial pour améliorer la sécurité de la gestion de l'identité et de l'accès dans les applications modernes. Incorporer les meilleures pratiques pour gérer la revendication "iat" assure un processus d'authentification d'identité robuste et sécurisé.
Assurez-vous également que votre horloge d'ordinateur est toujours synchronisée avec le serveur de temps mondial.