Décodage de JWT en ligne, gratuit

Décodez et inspectez les JSON Web Tokens · en-tête, charge utile, revendications et expiration.

En-tête


      

Charge utile


      

Signature


      

À propos des JWT

Les JSON Web Tokens (JWT) sont un moyen compact de représenter des revendications entre deux parties. Ils se composent de trois parties : un en-tête (algorithme et type), une charge utile (revendications telles que l'émetteur, l'expiration, le sujet) et une signature. Cet outil décode l'en-tête et la charge utile, mais ne vérifie pas les signatures · pour cela, vous avez besoin du secret de signature ou de la clé publique. Tout le décodage s'effectue dans votre navigateur ; votre jeton n'est jamais envoyé où que ce soit.

Une brève histoire des JSON Web Tokens

Le JSON Web Token (JWT) a été normalisé en tant que RFC 7519 en mai 2015 par Michael B. Jones (Microsoft), John Bradley (Ping Identity) et Nat Sakimura (NRI) sous l'égide du groupe de travail JOSE de l'IETF. Ce fut l'aboutissement d'une demi-décennie de travail : le premier internet-draft JWT est apparu en décembre 2010, issu du format d'assertion lourd basé sur XML de SAML 2.0 (2005) et du besoin ressenti de quelque chose de plus léger que les navigateurs pouvaient analyser nativement. La percée a été le choix de JSON plutôt que XML et de base64url plutôt que PEM : un JWT pouvait tenir dans une chaîne de requête URL ou un en-tête Authorization: Bearer. Toute la famille JOSE a été livrée comme un ensemble coordonné : RFC 7515 (JWS) pour la signature, RFC 7516 (JWE) pour le chiffrement, RFC 7517 (JWK) pour le format de clé, RFC 7518 (JWA) pour les identifiants d'algorithme et RFC 7519 (JWT) pour la couche de revendications, tous le même jour de mai 2015. L'adoption a été instantanée. OAuth 2.0 (RFC 6749, 2012) avait normalisé les jetons d'accès mais laissé leur format opaque ; l'industrie a choisi JWT. OpenID Connect (décembre 2014, OpenID Foundation) a rendu JWT obligatoire pour les jetons ID. En 2017, tous les principaux fournisseurs d'identité (Auth0, Okta, Azure AD, AWS Cognito, Google Identity, Firebase Auth) émettaient des JWT comme leur format de session natif. JWT.io, le site web de décodeur lancé par Auth0 en 2014, est devenu l'outil de débogage JWT de facto et a contribué à cimenter la part d'esprit des développeurs envers le format. Deux incidents de sécurité ont façonné le modèle de menace moderne : la divulgation par Tim McLean en 2015 du contournement alg: none et de l'attaque par confusion d'algorithme HS/RS, et CVE-2022-21449 (avril 2022), le bug «Psychic Signatures» de Neil Madden dans le vérificateur ECDSA de Java 15-18. Les deux ont conduit à un durcissement par défaut des bibliothèques : la plupart des bibliothèques modernes refusent désormais alg: none d'emblée et épinglent l'algorithme attendu plutôt que de le lire dans l'en-tête du jeton.

L'anatomie d'un JWT

Où les JWT sont utilisés en pratique

Standards et jalons de sécurité

Questions fréquentes supplémentaires

Pourquoi cet outil ne vérifie-t-il pas la signature ?

La vérification nécessite un secret (HMAC) ou une clé publique (RSA / ECDSA / EdDSA). Coller un secret HMAC de production sur un site web est en soi une fuite de credentials, même sur un outil qui jure ne rien transmettre. La vérification appartient à un serveur que vous contrôlez. Le rôle du décodeur est de rendre le contenu lisible pour que vous puissiez voir ce que votre vérificateur devrait vérifier.

Est-il sûr de coller de vrais jetons de production ici ?

Le décodage se fait entièrement dans votre navigateur. Le jeton n'est pas envoyé sur le réseau, écrit dans aucun journal, ni stocké nulle part. Cela dit, un JWT est souvent un credential : quiconque détient un jeton d'accès non expiré peut agir comme l'utilisateur. La convention communautaire est «traitez un JWT de production comme un cookie de session» : préférez les jetons de test quand vous le pouvez, et faites tourner tout jeton réel que vous avez partagé en dehors de la session de navigateur qui l'a émis.

Où devrais-je stocker un JWT dans le navigateur ?

Les deux modèles courants ont chacun un compromis. localStorage est pratique mais lisible par toute attaque XSS réussie sur la page. Les cookies avec HttpOnly sont invisibles pour JavaScript donc XSS ne peut pas les lire, mais ils ont besoin de SameSite=Strict ou SameSite=Lax pour éviter CSRF. La meilleure pratique actuelle : jetons d'accès à courte durée de vie dans une variable JavaScript (mémoire uniquement) plus un jeton de rafraîchissement à longue durée de vie dans un cookie HttpOnly + Secure + SameSite=Strict limité au point de terminaison de rafraîchissement, alterné à chaque utilisation.

Que fait le champ kid dans l'en-tête ?

Il identifie quelle clé a signé le jeton. Les fournisseurs d'identité modernes publient leurs clés publiques sur un point de terminaison /.well-known/jwks.json sous forme d'ensemble JWK (RFC 7517) ; le vérificateur recherche la clé dont le kid correspond à l'en-tête du jeton. C'est ce qui rend possible la rotation de clés sans interruption : les anciennes et nouvelles clés peuvent coexister dans le JWKS pendant la période de grâce.

Puis-je révoquer un JWT une fois émis ?

Pas nativement. Un JWT signé est valide jusqu'à sa revendication exp ; cette absence d'état est la propriété phare du format. Solutions de contournement : garder les jetons d'accès courts (5-15 minutes) associés à un jeton de rafraîchissement révocable ; maintenir une liste de refus côté serveur des valeurs jti révoquées ; faire tourner la clé de signature (ce qui invalide tous les jetons en cours signés avec elle). Chaque option réintroduit un certain état ; c'est le compromis.

Décoder un jeton est-il la même chose que le déchiffrer ?

Non. Le décodage inverse base64url vers JSON : tout le monde peut le faire, et c'est le but. Le déchiffrement nécessite une clé et ne s'applique qu'à JSON Web Encryption (JWE, RFC 7516), qui est la variante chiffrée de la famille JOSE. La plupart des jetons que vous voyez dans la nature sont des JWS (signés mais non chiffrés), donc le décodage suffit à les lire.

Outils associés