Décodez un JSON Web Token et consultez l'en-tête et la charge utile.
Les résultats sont fournis à titre informatif. Vérifiez-les auprès d'autres sources.
Calculé dans votre navigateur. Rien de ce que vous saisissez n'est envoyé.
Lire un JSON Web Token
Un JWT est fait de trois segments Base64url séparés par des points : un en-tête indiquant le mode de signature, une charge utile de revendications, et une signature portant sur les deux premiers. Le décodage montre ce que le jeton affirme, pas si c'est vrai.
Comment ça marche
- Découpe le jeton sur ses deux points en en-tête, charge utile et signature.
- Décode les deux premiers segments depuis le Base64url vers du JSON et les met en forme.
- Affiche les revendications temporelles standard — exp, iat, nbf — sous forme de dates, puisqu'elles sont stockées en secondes Unix.
- Ne touche pas à la signature : la vérifier exige le secret ou la clé publique de l'émetteur, qu'il ne faut jamais coller dans une page web.
jeton = base64url(en-tête) . base64url(charge) . base64url(signature) signature = HMAC ou RSA/ECDSA sur les deux premiers segments exp/iat = secondes depuis 1970-01-01T00:00:00Z (pas des millisecondes)
Exemple chiffré
L'en-tête de presque tous les jetons HS256 existants, décodé à la main.
- JSON de l'en-tête : {"alg":"HS256","typ":"JWT"}
- encodage Base64 : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- notez que le remplissage = final est retiré — JWT l'omet toujours
- une charge utile {"sub":"1234567890","iat":1516239022}
- 1516239022 secondes → 2018-01-18T01:30:22Z
Le jeton décodé dit qu'il a été signé en HMAC-SHA256, qu'il concerne le sujet 1234567890 et qu'il a été émis le 18 janvier 2018. Son authenticité est une question distincte, à laquelle répond la signature.
Lire le résultat
- Décoder n'est pas vérifier. Un jeton dont la charge dit admin: true ne prouve rien tant que la signature ne correspond pas à une clé de confiance. Ne fondez jamais une décision d'autorisation sur une charge décodée seule.
- Ne collez pas de jetons de production dans des décodeurs en ligne. Celui-ci s'exécute entièrement dans votre navigateur et n'envoie rien, mais ce n'est pas vrai de tous les sites, et un jeton bearer est un mot de passe.
- La charge utile est encodée, pas chiffrée. Quiconque détient le jeton lit toutes ses revendications : n'y mettez jamais de secret.
- Vérifiez exp face à l'heure courante et rejetez ce qui est expiré. Vérifiez aussi iss et aud — une signature valide du mauvais émetteur reste le mauvais jeton.
- alg: none est une valeur réelle et une attaque réelle. Un vérificateur qui fait confiance au choix d'algorithme de l'en-tête peut se voir dire de ne rien vérifier.
Questions fréquentes
- Cet outil peut-il me dire si mon jeton est valide ?
- Non, et aucun décodeur ne le peut sans votre clé. Il montre ce que le jeton affirme. La validité suppose que la signature corresponde, que le jeton ne soit pas expiré et que l'émetteur et l'audience soient ceux attendus — des contrôles qui appartiennent à votre serveur, via une bibliothèque.
- Est-il sûr de coller mon jeton ici ?
- Cette page décode dans votre navigateur et ne transmet rien. Malgré tout, la bonne habitude est d'utiliser des jetons d'un environnement de test. Traitez tout jeton donnant un accès réel comme un mot de passe.
- Pourquoi ma date exp tombe-t-elle en 1970 ?
- Vous passez presque certainement des millisecondes là où la spécification attend des secondes. Date.now() en JavaScript renvoie des millisecondes ; divisez par 1000 avant de placer la valeur dans une revendication.