Aller au contenu

header.payload.signature

Décodeur JWT

Un JSON Web Token (JWT) est composé de 3 parties Base64url séparées par des points : en-tête, payload et signature. Collez un jeton pour lire ses claims et ses dates ; il est décodé ici, pas vérifié.

Le jeton reste dans cet onglet et n’est envoyé nulle part. Un jeton décodé n’est pas un jeton de confiance : la signature n’est jamais vérifiée ici.

Scanned by NortonTM Safe Web

En bref

Prix
Sans frais
Compte
Aucun requis
Normes
RFC 7519 (JWT), RFC 7515 (JWS), RFC 7516 (JWE)
Signature
Non vérifiée — le jeton est seulement décodé
Heures
exp, nbf et iat affichés en UTC et comparés à votre horloge
Envoi
Aucun — le jeton reste dans l’onglet de votre navigateur

Un jeton d’exemple et les algorithmes courants

Le jeton d’exemple de cette page est signé avec HMAC-SHA-256 à l’aide d’une clé jetable. La page l’a décodé pour produire le premier tableau.

Claims du jeton d’exemple
ClaimValeurHeure (UTC)
issauth.example.com—
subuser-42—
audapi—
iat17000000002023-11-14 22:13:20 UTC
exp17000036002023-11-14 23:13:20 UTC
Algorithmes de signature courants (alg)
algFamilleHachageTaille de la signature
HS256HMACSHA-25632 B
HS512HMACSHA-51264 B
RS256RSASSA-PKCS1-v1_5SHA-256256 B (2048-bit key)
ES256ECDSA P-256SHA-25664 B
ES512ECDSA P-521SHA-512132 B
EdDSAEdDSA—64 B (Ed25519)

Comment décoder un JWT

1

Collez le jeton

Collez le jeton entier, avec ou sans Bearer au début. Il a 3 parties séparées par des points, ou 5 s’il s’agit d’un JWE chiffré.

2

Lisez les parties

L’en-tête et le payload apparaissent sous forme de JSON formaté, et chaque claim est listé dans un tableau. Les dates exp, nbf et iat sont affichées en UTC.

3

Vérifiez l’heure

La page compare exp et nbf à l’horloge de votre appareil et indique si le jeton a expiré. Elle ne dit pas si le jeton est authentique.

Comment un JWT est construit

Un JWT (RFC 7519) s’écrit header.payload.signature. L’en-tête et le payload sont des objets JSON, chacun encodé en Base64url sans remplissage (RFC 4648, section 5), et la signature est constituée d’octets bruts dans le même encodage. Le décodage ne change que l’encodage : toute personne qui détient un jeton peut donc lire son payload, n’y placez aucun secret. L’en-tête indique l’algorithme de signature dans alg, par exemple HS256 (HMAC avec SHA-256, une signature de 32 octets) ou RS256 (RSA avec SHA-256, 256 octets pour une clé de 2048 bits).

Cette page décode un jeton et rien de plus. Elle ne vérifie pas la signature, car cela exige la clé, et elle ne peut pas dire si un jeton est authentique, révoqué ou accepté par un serveur. Elle compare les claims exp, nbf et iat, qui comptent des secondes depuis le 1970-01-01 UTC, à l’horloge de votre appareil et les affiche sous forme de dates et heures UTC. Un jeton à 5 parties est un JWE : son contenu est chiffré, seul son en-tête peut donc être affiché.

Questions sur les JWT

Comment décoder un JWT ?

Collez le jeton dans la zone. La page le découpe aux points, convertit les deux premières parties depuis Base64url et les affiche en JSON. Un Bearer au début est ignoré. Pour le jeton d’exemple, l’en-tête est {"alg":"HS256","typ":"JWT"}.

Cette page vérifie-t-elle la signature ?

Non. La vérification exige le secret ou la clé publique, et cette page n’en demande jamais. Un jeton qui se décode ici peut quand même être falsifié, modifié ou révoqué. Vérifiez la signature dans le code de votre propre serveur avec une bibliothèque JWT maintenue.

Que signifient exp, iat et nbf ?

Ce sont des dates en secondes depuis le 1970-01-01 UTC (RFC 7519). exp est le moment où le jeton expire, nbf l’instant avant lequel il ne doit pas être accepté, et iat le moment où il a été émis. Dans le jeton d’exemple, iat 1700000000 correspond au 2023-11-14 22:13:20 UTC et exp 1700003600 à une heure plus tard.

Peut-on coller ici un vrai jeton sans risque ?

Le jeton reste dans l’onglet de votre navigateur et n’est envoyé nulle part. Un jeton actif reste néanmoins un identifiant : toute personne qui le détient peut l’utiliser jusqu’à son expiration. Collez des jetons qui vous appartiennent et préférez, quand c’est possible, des jetons expirés ou de test.

Pourquoi mon jeton a-t-il 5 parties ?

Un jeton à 5 parties est un JWE, un JSON Web Token chiffré (RFC 7516). Son payload est chiffré pour le destinataire : cette page n’affiche donc que l’en-tête et la taille des parties. Le contenu ne peut pas être lu ici.

Que signifie « not Base64url » ou « not JSON » ?

Chacune des deux premières parties doit être du texte Base64url qui se décode en objet JSON. La page nomme la partie en cause et la raison : un caractère hors de l’alphabet, des octets qui ne sont pas de l’UTF-8, ou du JSON avec une erreur à une ligne et une colonne données. Un jeton tronqué ou avec des caractères en trop est la cause habituelle.