Mode d’emploi
- Collez le jeton complet : trois parties Base64URL séparées par des points.
- Lisez l’en-tête et la charge utile décodés. Les revendications exp, iat et nbf sont affichées sous forme de dates, avec un avertissement si le jeton est expiré ou pas encore valide.
- Pour vérifier la signature, ouvrez « Vérifier la signature », puis saisissez le secret partagé dans « Clé secrète » pour HS256, HS384 ou HS512, ou collez la clé publique PEM dans « Clé publique (PEM, SPKI) » pour les algorithmes RS, PS ou ES.
- Vérifiez que les revendications d’émetteur, d’audience et de sujet correspondent à ce qu’attend votre application.
Structure d’un JWT
Un JSON Web Token (RFC 7519) se compose de trois parties séparées par des points : header.payload.signature. L’en-tête et la charge utile sont des objets JSON encodés en Base64URL sans remplissage, c’est pourquoi les jetons commencent presque toujours par eyJ, la forme encodée d’un {" ouvrant. La signature est calculée sur les deux premières parties, exactement telles qu’elles figurent dans le jeton.
- En-tête : l’algorithme de signature dans
alg, généralement"typ": "JWT", et souvent unkidqui désigne la clé. - Charge utile : les revendications (claims), par exemple l’identité de l’utilisateur, l’émetteur du jeton et sa date d’expiration.
- Signature : une signature HMAC, RSA ou ECDSA qui prouve que l’en-tête et la charge utile n’ont pas été modifiés.
Un jeton en cinq parties est un JWE chiffré ; son contenu ne peut pas être lu sans la clé de déchiffrement.
Revendications enregistrées
| Revendication | Nom | Signification |
|---|---|---|
iss | Émetteur (Issuer) | Qui a créé et signé le jeton |
sub | Sujet (Subject) | Ce que le jeton concerne, généralement un identifiant d’utilisateur |
aud | Audience | Le service auquel le jeton est destiné |
exp | Date d’expiration (Expiration time) | Après ce moment, le jeton doit être refusé |
nbf | Pas avant (Not before) | Avant ce moment, le jeton doit être refusé |
iat | Date d’émission (Issued at) | Moment où le jeton a été créé |
jti | Identifiant JWT (JWT ID) | Identifiant unique, utilisé pour détecter les rejeux |
Les dates sont des valeurs NumericDate : des secondes écoulées depuis le 1er janvier 1970 UTC, et non des millisecondes. Le décodeur les affiche sous forme de dates lisibles et les compare à l’horloge de votre appareil.
Décoder n’est pas vérifier
N’importe qui peut décoder un JWT, car la charge utile est seulement encodée, pas chiffrée ; n’y placez jamais de mots de passe ni d’autres secrets. La confiance ne vient que de la vérification de la signature avec la bonne clé, et un serveur qui accepte des jetons doit en outre :
- n’autoriser que l’algorithme attendu et refuser
"alg": "none", qui désigne un jeton non signé ; - ne jamais laisser l’en-tête du jeton choisir entre HMAC et RSA, faute de quoi un attaquant peut signer un jeton falsifié en utilisant votre clé publique comme secret HMAC ;
- vérifier
exp,nbf,issetaudà chaque requête.
La vérification facultative proposée sur cette page utilise l’API Web Crypto intégrée à votre navigateur. Le décodage et la vérification ont lieu sur votre appareil, et rien n’est envoyé. En règle générale, ne collez jamais de clés de signature de production ni de jetons en cours de validité dans des sites web auxquels vous ne faites pas confiance.
Questions fréquentes
Est-il sûr de coller un JWT dans ce décodeur ?
Le jeton est décodé et vérifié par du JavaScript dans votre navigateur et n’est jamais envoyé à un serveur. Gardez toutefois à l’esprit qu’un jeton non expiré fonctionne comme un mot de passe pour quiconque le détient : privilégiez des jetons de test ou expirés lorsque vous partagez des captures d’écran ou des journaux.
Puis-je décoder un JWT sans la clé secrète ?
Oui. L’en-tête et la charge utile ne sont que du JSON encodé en Base64URL : ils se lisent sans aucune clé. La clé secrète ou la clé publique n’est nécessaire que pour vérifier la signature.
Pourquoi le décodeur indique-t-il que mon jeton a expiré ?
exp est antérieure à l’heure actuelle de votre appareil. Si le jeton devrait encore être valide, vérifiez l’horloge de votre système et la durée de vie des jetons configurée par l’émetteur.Quels algorithmes de signature peuvent être vérifiés ?
HS256, HS384 et HS512 avec un secret partagé, ainsi que RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384 et ES512 avec une clé publique au format PEM.
Que signifie "alg": "none" ?
Cette valeur désigne un JWT non sécurisé, à signature vide, défini dans la RFC 7518. N’importe qui peut créer ou modifier un tel jeton : un serveur qui attend des jetons signés doit donc toujours le refuser.