Comment décoder et inspecter des jetons JWT
Les jetons JSON Web Token (JWT) sont la façon la plus courante de gérer l'authentification dans les applications web modernes. Quand quelque chose cloche côté auth — un utilisateur est déconnecté sans raison, les permissions sont mauvaises, ou une API renvoie 401 — décoder le JWT est souvent la première étape de débogage.
Ce que contient un JWT
Un JWT a trois parties séparées par des points :
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U
En-tête — contient l'algorithme (HS256, RS256, etc.) et le type de jeton.
{"alg": "HS256", "typ": "JWT"}
Charge utile — contient des revendications (affirmations) sur l'utilisateur et le jeton.
{"sub": "1234567890", "name": "Alice", "exp": 1700000000}
Signature — une empreinte cryptographique qui garantit que le jeton n'a pas été altéré. Vous ne pouvez pas la lire sans la clé de signature.
Revendications JWT courantes
| Revendication | Nom complet | Contenu |
|---|---|---|
sub |
Subject | ID ou identifiant utilisateur |
exp |
Expiration | Horodatage Unix de fin de validité |
iat |
Issued At | Horodatage Unix de création |
iss |
Issuer | Qui a créé le jeton (votre serveur d'auth) |
aud |
Audience | À qui le jeton est destiné |
nbf |
Not Before | Le jeton n'est pas valide avant cette date |
jti |
JWT ID | Identifiant unique du jeton |
Comment décoder un JWT
- Collez votre jeton — saisissez le JWT complet (format en-tête.charge.signature) dans le décodeur.
- Consultez les sections décodées — l'outil affiche l'en-tête (algorithme), la charge utile (revendications) et la signature sous forme de JSON formaté.
- Vérifiez les revendications — examinez la date d'expiration, l'émetteur, le sujet et toute revendication personnalisée.
Déboguer avec des JWT
Jeton expiré ? Vérifiez la revendication exp. Convertissez l'horodatage Unix en date lisible. S'il est passé, le jeton a expiré et doit être rafraîchi.
Mauvaises permissions ? Cherchez des revendications de rôle ou de portée dans la charge utile. Elles varient selon les implémentations mais ressemblent souvent à "role": "admin" ou "scope": "read write".
Problème d'identité utilisateur ? La revendication sub identifie l'utilisateur. Vérifiez qu'elle correspond à l'ID attendu.
Jeton refusé ? Vérifiez la revendication aud (audience). Si l'API attend une audience spécifique et que le jeton en a une autre, il sera rejeté.
Notes de sécurité importantes
- Les JWT ne sont pas chiffrés — n'importe qui peut décoder la charge utile. Ne mettez pas de mots de passe, clés d'API ou autres secrets dans un JWT.
- Vérifiez toujours les signatures côté serveur — un décodeur vous montre ce que le jeton revendique, mais seule la vérification de signature prouve qu'il n'a pas été altéré.
- Vérifiez l'expiration — les jetons expirés doivent toujours être rejetés. Si votre application accepte des jetons expirés, c'est une faille de sécurité.
Questions fréquentes
Puis-je vérifier une signature JWT avec un décodeur ?
Non. La vérification de signature nécessite le secret de signature ou la clé publique, conservés sur votre serveur. Un décodeur vous montre ce qu'il y a dans le jeton, mais la vérification cryptographique doit se faire sur votre backend. Ne faites jamais confiance à un JWT non vérifié en production.
Est-il sûr de coller un JWT dans un outil en ligne ?
Oui, quand l'outil tourne dans votre navigateur. Les décodeurs dans le navigateur traitent le jeton localement — rien n'est envoyé sur un serveur. Évitez les outils qui font des requêtes réseau avec votre jeton.
Qu'est-ce que la revendication exp ?
La revendication exp (expiration) est un horodatage Unix indiquant quand le jeton expire. Après cette date, le jeton doit être rejeté. Vérifiez toujours cette revendication pour déboguer des problèmes d'authentification.
Les JWT peuvent-ils être chiffrés ?
Les JWT standards (JWS) sont signés mais pas chiffrés — n'importe qui peut décoder la charge utile. Les jetons JWE (JSON Web Encryption) sont chiffrés, mais moins courants. Ne mettez jamais de données sensibles (mots de passe, secrets) dans une charge utile JWT standard.