Décodeur JWT
Décode le header et le payload JWT. La signature n’est pas vérifiée.
Mode d’emploi
Un JSON Web Token (JWT, RFC 7519) se compose généralement de trois parties séparées par des points : un en-tête, un payload et une signature. Les deux premières sont du JSON encodé en Base64URL, une variante de Base64 utilisable sans risque dans les URL et qui, dans les JWT, s’écrit sans remplissage =. Collez un token : « Décoder » affiche l’en-tête et le payload sous forme de JSON indenté. La signature n’est pas décodée : il s’agit de données binaires, pas du JSON.
L’en-tête indique l’algorithme (alg) : HS256 utilise un secret partagé (un HMAC), tandis que RS256 et ES256 sont des signatures créées avec une clé privée et vérifiées avec la clé publique correspondante. Le payload contient les claims ; parmi les claims standard figurent iss (émetteur), sub (sujet), aud (destinataire), exp (expiration), nbf (pas valide avant), iat (date d’émission) et jti (identifiant du token).
exp, nbf et iat sont des timestamps Unix en secondes. Cet outil les affiche sous forme de nombres ; pour en lire un sous forme de date, collez-le dans l’outil « Convertisseur Unix timestamp ».
Décoder n’est pas vérifier. N’importe qui peut créer un token avec n’importe quel payload : un token décodé ne prouve donc rien tant que l’application qui le reçoit n’a pas vérifié la signature avec la bonne clé, limité les algorithmes acceptés à ceux qu’elle attend et contrôlé exp et nbf. Un token dont alg vaut none n’a aucune signature et doit être rejeté, sauf si c’est explicitement voulu.
Base64URL est un encodage, pas un chiffrement : toute personne qui possède un token peut lire son payload, et c’est pourquoi les mots de passe et autres secrets n’ont rien à y faire. Les tokens chiffrés (JWE) comportent cinq parties et ne peuvent pas être lus sans la clé : cet outil les refuse donc. Le décodage se fait dans votre navigateur ; le token n’est envoyé nulle part.
Exemple
Décode un jeton de démonstration. Lire son en-tête et son contenu ne vérifie ni signature ni authenticité.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.signatureEn-tête {"alg": "HS256", "typ": "JWT"} et payload {"sub": "123"}.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJuYW1lIjoiQW5hIiwiaWF0IjoxNzA0MDY3MjAwLCJleHAiOjE3MDQwNzA4MDB9.signaturePayload avec iat 1704067200 et exp 1704070800 : émis le 1er janvier 2024 à minuit UTC et valable une heure.eyJhbGciOiJub25lIn0.eyJzdWIiOiIxMjMifQ.En-tête {"alg": "none"} et signature vide : un token non signé, qu’un serveur devrait normalement refuser.
Questions fréquentes
Puis-je coller un token de production sans risque ?
Le traitement est local, mais les tokens peuvent contenir des données sensibles. Préférez un token expurgé ou expiré et ne partagez jamais un secret de signature.
Cet outil peut-il me dire si un token est valide ?
Non. Il ne vérifie ni la signature, ni l’expiration, ni l’émetteur. Pour vérifier un token, il faut le secret partagé (HS256) ou la clé publique de l’émetteur (RS256, ES256), et c’est le rôle de l’application qui l’accepte.
Pourquoi le payload est-il lisible si le token est signé ?
Une signature protège contre les modifications, pas contre la lecture. Le payload est seulement encodé en Base64URL : il est donc public pour quiconque voit le token.
Pourquoi une erreur s’affiche-t-elle ?
Le texte n’est pas un token dont les deux premières parties se décodent en JSON. Vérifiez que le token a été copié en entier, sans le mot Bearer ni guillemets qui l’entourent, et qu’il ne s’agit pas d’un JWE chiffré.