Ce que contient un JWT
Un JWT a trois parties séparées par des points : un en-tête (l’algorithme de signature, par exemple HS256 ou RS256), un payload avec les « claims » (identifiant dans sub, expiration dans exp, émetteur dans iss, audience dans aud…) et une signature. En-tête et payload sont seulement encodés en base64url, pas chiffrés : quiconque possède le jeton peut les lire.
Décoder n’est pas vérifier
Cette page ne vérifie pas la signature, car il faut le secret (HS256) ou la clé publique de l’émetteur (RS256, ES256). Un jeton décodé peut donc être falsifié. Votre serveur doit toujours vérifier la signature et les claims exp, nbf, iss et aud avec une bibliothèque JWT. Un jeton avec "alg": "none" n’a aucune signature et doit être refusé.
Pourquoi décoder en local
Un jeton d’accès est un identifiant : le coller dans un site qui l’envoie à un serveur peut donner accès à votre compte ou à votre API. Ici, le décodage est du JavaScript dans votre onglet, rien n’est envoyé ni enregistré. Les jetons chiffrés (JWE, cinq parties) ne sont pas lisibles sans la clé, et l’outil le signale.
Exemple
Le jeton d’exemple public de la documentation JWT. L’horodatage iat est affiché en date ; la signature est signalée mais pas vérifiée.
Entrée
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Résultat
Header:
{
"alg": "HS256",
"typ": "JWT"
}
Payload:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Dates (UTC):
iat: 2018-01-18T01:30:22Z
Signature: 43 characters, NOT verified