SuperDevTools

Décoder un JWT en ligne

Prudence avec les jetons réels

Ne collez pas un jeton de production encore actif sur un site que vous ne connaissez pas : quiconque le lit peut s'en servir jusqu'à son expiration. Ici, le décodage, la vérification et la création se font entièrement dans votre navigateur : rien n'est envoyé, aucun jeton ni secret n'est enregistré.

Collez le jeton complet (trois parties séparées par des points). Le préfixe « Bearer » est retiré tout seul.

Collez un jeton pour voir son en-tête, sa charge utile et ses dates.

Vérifier la signature

Créer un jeton HS256 de test

Un décodeur JWT qui reste dans votre navigateur

Un JWT (JSON Web Token) est le jeton que de nombreuses API et applications échangent après une connexion. Cet outil sert à décoder un JWT : il affiche l'en-tête et la charge utile en JSON coloré, traduit les dates, explique les claims et vérifie la signature si vous fournissez le secret ou la clé publique.

Le décodage, la vérification et la création se font entièrement dans votre navigateur : aucun jeton n'est envoyé, rien n'est enregistré. Malgré cela, ne collez jamais un jeton de production encore actif sur un site que vous ne connaissez pas : celui qui le lit peut s'en servir jusqu'à son expiration.

Mode d'emploi

  1. Collez le jeton dans le champ « Jeton JWT ». Le préfixe « Bearer » copié depuis un en-tête HTTP est retiré tout seul. Le bouton « Charger un exemple » remplit un jeton de démonstration.
  2. Les trois parties apparaissent en couleur, puis les blocs « En-tête », « Charge utile » et « Signature ». Survolez une clé soulignée, comme exp ou iss, pour lire sa signification.
  3. Le bloc « Dates et validité » convertit iat, nbf et exp en dates lisibles et affiche l'état : « Expiré depuis 3 jours », « Valide encore 45 minutes »…
  4. Dans « Vérifier la signature », saisissez le secret partagé pour HS256, HS384 ou HS512, ou collez une clé publique PEM ou JWK pour RS256, PS256 ou ES256. Le verdict s'affiche : « Signature valide » ou « Signature invalide ».
  5. « Créer un jeton HS256 de test » fabrique un jeton à partir d'un en-tête, d'une charge utile et d'un secret de votre choix.

Comment est construit un JWT

Un JWT signé compte trois parties séparées par des points : en-tête.charge.signature. L'en-tête eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 se décode en {"alg": "HS256", "typ": "JWT"} : il annonce l'algorithme de signature. La charge utile contient les informations, appelées claims. Dans l'exemple de l'outil, elle vaut {"sub": "42", "name": "Exemple", "iat": 1700000000, "exp": 4102444800} : le jeton a été émis le 14 novembre 2023 à 23:13:20, heure de Paris, et expire le 1er janvier 2100 à 01:00, heure de Paris. La signature scelle le tout.

Base64url n'est pas un chiffrement

Les deux premières parties sont seulement encodées en base64url, une variante de Base64 qui remplace + et / par - et _ et supprime les =. N'importe qui peut donc lire la charge utile, sans aucune clé. La signature empêche de la modifier, pas de la lire. Un jeton à cinq parties est un JWE, une forme chiffrée que l'outil reconnaît mais ne peut pas ouvrir.

Les claims standard

La norme définit sept noms courts : iss (émetteur), sub (sujet), aud (audience), exp (expiration), nbf (pas avant), iat (date d'émission) et jti (identifiant unique). Les dates sont des timestamps Unix en secondes.

Signatures symétriques et asymétriques

HS256 utilise un même secret pour signer et vérifier, avec HMAC-SHA-256 : la signature fait 32 octets. RS256 et ES256 utilisent une paire de clés : le serveur signe avec sa clé privée, et tout service peut vérifier avec la clé publique, souvent publiée en JWK. Une signature RS256 avec une clé de 2048 bits fait 256 octets, une signature ES256 en fait 64. Si l'en-tête annonce alg « none », le jeton n'est pas signé du tout : l'outil affiche une alerte, car un serveur ne doit jamais l'accepter.

Bonnes pratiques

  • Donnez aux jetons d'accès une durée de vie courte, de quelques minutes à une heure.
  • N'y mettez ni mot de passe, ni secret, ni donnée sensible : la charge utile est lisible par tous.
  • Vérifiez toujours la signature, l'algorithme attendu, exp et aud côté serveur. Le décodage dans un navigateur sert à comprendre un jeton, pas à lui faire confiance.

Questions fréquentes

Puis-je décoder un JWT sans la clé ?

Oui. L'en-tête et la charge utile se lisent sans aucune clé. La clé ou le secret ne sert qu'à vérifier la signature.

Pourquoi la signature est-elle invalide alors que le secret est bon ?

Le secret est peut-être stocké en base64 côté serveur : cochez « Le secret est encodé en base64url ». Vérifiez aussi les espaces en trop et que l'algorithme de l'en-tête est bien celui de votre serveur.

Mon jeton est-il enregistré ?

Non. Le jeton, le secret et la clé restent dans la page, sans aucun envoi ni stockage. Ils disparaissent dès que vous fermez ou rechargez l'onglet.