Affichage en Français Passer à l'anglais

Décodeur JWT

Décodez et inspectez un JSON Web Token. La vérification de la signature nécessite la clé de signature et doit se faire côté serveur — cet outil se contente d'afficher le contenu.

  1. Copiez le JWT depuis votre appli, une réponse d'API ou l'en-tête Authorization.
  2. Collez-le dans le champ. Le décodage se lance automatiquement à la saisie.
  3. Lisez l'en-tête et le payload décodés ; la signature est affichée telle quelle à titre indicatif.
  4. Consultez le résumé des claims temporels (iat, exp, nbf) pour repérer les tokens expirés.
Que fait-il ?

Un JSON Web Token est composé de trois segments encodés en base64url séparés par des points : header.payload.signature. L'en-tête et le payload sont du JSON ; la signature est la sortie HMAC ou RSA/ECDSA sur les deux premiers segments. Cet outil découpe aux points, décode chaque partie en base64url, analyse le JSON et affiche les claims temporels standards comme exp sous forme de dates lisibles. Il ne vérifie pas la signature — voir la FAQ ci-dessous.

Exemple

Exemple de jeton de la spécification JWT (signé en HS256 avec le secret your-256-bit-secret) :

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

En-tête décodé :

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload décodé :

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Pourquoi ma signature JWT est-elle marquée invalide ?

Ce décodeur ne vérifie pas les signatures (voir FAQ), mais si un vérificateur côté serveur refuse votre jeton, les causes habituelles sont les suivantes.

  • Secret ou clé incorrects. Un seul caractère d'écart dans le secret HMAC produit une signature complètement différente. Vérifiez que la variable JWT_SECRET du service de validation correspond à celle de l'émetteur.
  • Algorithme différent. Un jeton signé en HS256 ne peut pas être vérifié en RS256. Contrôlez le claim alg dans l'en-tête et vérifiez que le vérificateur est configuré pour le même algorithme.
  • Jeton expiré. Même un JWT correctement signé échoue à la validation une fois exp dans le passé. Le résumé des claims temporels le montre explicitement après décodage.
  • Décalage d'horloge. nbf (not-before) dans un futur proche combiné à une dérive de l'horloge serveur provoque des erreurs « token not yet valid ». Autorisez une petite marge (p. ex. 60 secondes) dans votre vérificateur.
  • Espaces dans le jeton collé. Le copier-coller ajoute parfois un espace en tête ou un saut de ligne en fin. Un JWT doit être exactement header.payload.signature, sans espaces autour.
  • alg: none. Si l'en-tête indique « "alg": "none" », le jeton n'est pas signé. Refusez-les côté vérificateur — ne les considérez jamais valides.
Questions fréquentes

Cet outil peut-il vérifier la signature du JWT ?

Non, et c'est voulu. La vérification d'une signature nécessite la clé — un secret HMAC partagé ou une clé publique asymétrique. Cette clé doit rester sur le serveur qui émet ou consomme le jeton, pas collée dans une page web. Cet outil ne fait que décoder et afficher ; la vérification se fait côté serveur dans votre backend.

Que contient chacun des trois segments d'un JWT ?

Un JWT est header.payload.signature. L'en-tête est un JSON décrivant l'algorithme (alg) et le type. Le payload est un JSON contenant des claims comme sub, iat, exp. La signature est la sortie encodée en base64url obtenue en signant les deux premiers segments avec le secret ou la clé privée. Les deux premiers sont simplement encodés, pas chiffrés.

Mon JWT a expiré — comment le savoir ?

Regardez le claim exp dans le payload. C'est un timestamp Unix en secondes. Si Date.now() / 1000 est supérieur à exp, le jeton est expiré. Cet outil affiche exp, iat et nbf en dates lisibles sous le payload pour vous éviter le calcul.

Que signifie alg: none et pourquoi est-ce dangereux ?

alg: none est une fonctionnalité JWT où la signature est vide et non vérifiée. Beaucoup de bibliothèques acceptaient historiquement ces jetons, permettant à des attaquants de forger un JWT en créant un payload et en mettant alg à none. Si vous voyez cette valeur, le jeton n'est pas signé — ne faites confiance à aucun serveur qui l'accepte.

Conservez-vous les JWT collés ici ?

Non. Nous ne conservons aucun jeton collé dans le décodeur. Ce que vous saisissez est supprimé à la fermeture ou au rafraîchissement de l'onglet — pas de logs, aucune trace de nos côtés des jetons examinés. Cela dit, un JWT donne accès jusqu'à son exp : traitez-le comme un mot de passe et faites tourner tout jeton de production que vous déboguez.

La section signature affiche un bloc illisible — c'est normal ?

Oui. La signature est la sortie binaire de HMAC ou RSA/ECDSA, encodée en base64url. Elle n'est pas destinée à être lue — elle sert uniquement de contrôle cryptographique. Ce que vous manipulez, ce sont l'en-tête et le payload décodés. Une signature vide signifie que le jeton n'est pas signé (alg: none).