Atelier des jetons · Gratuit

Décodeur JWT

Collez un JSON Web Token pour voir son en-tête, sa charge utile et chaque claim en langage clair, avec l'expiration comparée à votre propre horloge. Vérifiez ensuite la signature avec un secret ou une clé publique, sans que le jeton quitte jamais cet onglet.

Décodé et vérifié dans votre navigateur · Rien n'est importé
Signaler un problème

Espace de travail du décodeur JWT

Jeton encodé

Collez un JWT

Collez-le tel qu'il est arrivé : avec ou sans Bearer, entre guillemets ou réparti sur plusieurs lignes. Il est décodé dans cet onglet pendant que vous tapez.

L'exemple est signé avec HS256, valable une heure à partir du moment où vous le chargez, et son secret est déjà saisi dans le vérificateur ci-dessous.

Anatomie du jeton

Chaque segment est étiqueté et coloré. L'en-tête et la charge utile sont du JSON en base64url ; la signature est faite d'octets bruts.

Un JWT, ce sont trois segments base64url reliés par des points : en-tête, charge utile, signature. Collez-en un et chaque segment sera repéré ici.

État du jeton

–

Collez un jeton, ou chargez l'exemple, et sa structure, son expiration et son algorithme apparaîtront ici.

Algorithme
–
Modèle de clé
–
Type
–
Émis
–
Expire
–
Durée de vie
–
Segment 1

En-tête

Quel algorithme a signé le jeton, et avec quelle clé. Décodé depuis le base64url.

L'en-tête décodé apparaît ici, avec l'explication de chacun de ses paramètres.

Segment 2

Charge utile

Les claims. Encodés, pas chiffrés : quiconque détient le jeton peut les lire.

La charge utile décodée apparaît ici en JSON mis en forme, prête à être copiée.

Claims

Chaque claim, expliqué

Les claims enregistrés de la RFC 7519, les claims OpenID Connect et OAuth courants, et tout claim personnalisé. Les dates sont affichées en UTC, dans votre propre fuseau horaire et par rapport à maintenant.

Chaque claim de la charge utile est listé ici avec sa signification, et exp, nbf et iat sont convertis en dates lisibles.

Signature

Vérifier la signature

Le décodage montre ce que dit un jeton. Seule une signature vérifiée avec la bonne clé montre qui l'a dit et que rien n'a été modifié. La clé reste dans cet onglet.

Décodez un jeton signé ci-dessus et le champ de clé correspondant apparaîtra ici : un secret pour HS256, HS384 et HS512, ou une clé publique pour RS, PS, ES et EdDSA.

Décodé ne veut pas dire vérifié

N'importe qui peut écrire un jeton qui se décode en n'importe quels claims. Seule une signature vérifiée avec la clé de l'émetteur, suivie des contrôles de exp, nbf, iss et aud, rend un jeton digne de confiance. Ne prenez jamais une décision d'accès sur la seule base d'une charge utile décodée.

Vérifiez que rien n'est envoyé

Ouvrez les outils de développement de votre navigateur (F12, ou Cmd+Option+I sur Mac), choisissez l'onglet Réseau, puis collez un jeton et vérifiez-le. Aucune requête ne le transporte : le décodage est du JavaScript pur et la vérification passe par l'API Web Crypto de votre navigateur. Les statistiques de pages vues du site n'incluent jamais ce que vous tapez dans un champ.

Les jetons chiffrés restent scellés

Un jeton à cinq segments est un JWE. Son en-tête protégé est lisible et affiché ci-dessus, mais les claims sont chiffrés avec une clé que seul le destinataire détient. Aucun décodeur ne peut les lire sans cette clé, et cette page n'essaie pas.

Tout ici s'exécute dans cet onglet. Le jeton, le secret et la clé publique ne vivent que dans la mémoire de la page : ils ne sont jamais stockés ni envoyés, et ils disparaissent quand vous les effacez ou fermez la page. La saisie est lue jusqu'à 100,000 caractères et les clés jusqu'à 50,000. Les heures sont comparées à l'horloge de cet appareil sans aucune tolérance : près de exp ou de nbf, quelques secondes de décalage entre vous et l'émetteur peuvent changer le verdict.

Comment ça marche

Trois segments, dont deux lisibles par n'importe qui.

Un JWT compact s'écrit header.payload.signature, chaque partie étant encodée en base64url. Les deux premières sont du JSON que n'importe qui peut décoder sans clé, ce que fait cette page pendant que vous tapez. La troisième est une signature des deux premières, et seule sa vérification avec la bonne clé vous dit que le jeton est authentique et intact. Tout s'exécute dans cet onglet : le décodeur est du JavaScript pur et la vérification utilise l'API Web Crypto intégrée à votre navigateur.

  1. 01

    Collez le jeton tel qu'il est arrivé

    Copiez-le depuis un en-tête Authorization, un cookie, une ligne de journal ou le débogueur de votre fournisseur d'identité. Le Bearer initial, les guillemets autour et les sauts de ligne sont retirés pour vous, et les trois segments sont étiquetés pour que vous voyiez où l'en-tête s'arrête et où la charge utile commence.

  2. 02

    Lisez l'en-tête, les claims et l'horloge

    Les deux segments JSON sont décodés et mis en forme. Chaque claim enregistré et les claims OpenID Connect et OAuth courants sont expliqués en termes simples, et exp, nbf, iat et auth_time sont affichés en UTC, dans votre propre fuseau horaire et sous forme de compte à rebours en direct : un jeton expiré se repère d'un coup d'œil.

  3. 03

    Vérifiez la signature si la réponse compte

    Décoder ne prouve rien sur l'auteur d'un jeton. Collez le secret HMAC pour HS256, HS384 ou HS512, ou la clé publique de l'émetteur sous forme de bloc PEM, de JWK ou d'ensemble JWK complet pour RS, PS, ES et EdDSA, et Web Crypto la vérifie dans cet onglet.

Conçu pour déboguer l'authentification

Tout ce que vous vérifiez quand un jeton est refusé.

L'expiration selon votre propre horloge

exp, nbf et iat deviennent des dates lisibles et un compte à rebours en direct, avec un verdict clair : non expiré, expiré, pas encore valide ou sans expiration. Un horodatage à 13 chiffres écrit en millisecondes par erreur est repéré et expliqué, tout comme un iat placé dans le futur.

Chaque claim expliqué

iss, sub, aud, exp, nbf, iat et jti de la RFC 7519, plus name, email, azp, nonce, auth_time, scope, client_id et d'autres claims OpenID Connect et OAuth courants, chacun avec sa signification et la spécification dont il provient. Les claims personnalisés sont signalés comme tels au lieu d'être devinés.

Des avertissements qui comptent pour la sécurité

alg none, une signature absente, des paramètres d'en-tête qui pointent vers les propres clés du jeton (jku, x5u, jwk), un remplissage Base64 que les bibliothèques strictes refusent et des secrets HMAC plus courts que ce qu'autorise la RFC 7518 : tout est signalé, avec la marche à suivre.

Une vraie vérification de signature

HS256, HS384 et HS512 avec un secret partagé ; RS256 à RS512, PS256 à PS512, ES256 à ES512 et EdDSA avec Ed25519 à partir d'un PEM SPKI, d'un JWK ou d'un ensemble JWK où la clé est choisie par kid. Les types de clé et les algorithmes incompatibles sont refusés, avec leur nom.

Des erreurs nommées plutôt qu'un écran vide

Un mauvais nombre de segments, un caractère hors de l'alphabet base64url (avec sa position exacte), un texte qui n'est pas du JSON et un en-tête qui n'est pas un objet ont chacun leur propre explication. Un JWE à cinq segments est reconnu comme chiffré et son en-tête reste affiché.

Rien ne quitte l'onglet

Le décodage est du JavaScript pur et la vérification passe par l'API Web Crypto de votre navigateur. Il n'y a ni importation, ni stockage, ni requête transportant le jeton, ce que vous pouvez confirmer dans l'onglet Réseau des outils de développement de votre navigateur.

Questions sur les JWT

Encodé ne veut pas dire chiffré, et décodé ne veut pas dire vérifié.

Qu'est-ce qu'un JWT ?+

Un JSON Web Token (RFC 7519) est un moyen compact de transmettre des claims entre deux parties : trois segments base64url reliés par des points. L'en-tête indique l'algorithme, la charge utile contient les claims (de qui parle le jeton, qui l'a émis, à qui il est destiné et quand il expire) et la signature permet au destinataire de vérifier que les deux premières parties ont été produites par quelqu'un qui détient la bonne clé et qu'elles n'ont pas été modifiées. Les JWT servent surtout de jetons d'accès OAuth et de jetons d'identité OpenID Connect.

Comment décoder un JWT ?+

Coupez-le aux points, décodez en base64url les deux premiers segments et analysez chaque résultat comme du JSON. Décoder se résume à cela, et c'est pourquoi aucune clé n'est nécessaire. Collez un jeton dans le champ ci-dessus et le décodage se fait pendant que vous tapez. base64url est du Base64 ordinaire avec le tiret et le tiret bas à la place du plus et de la barre oblique, et sans les signes égal finaux : avec un décodeur Base64 standard, il faut donc d'abord rétablir ces deux caractères.

Est-il sûr de décoder un JWT en ligne ?+

Seulement sur une page qui le décode localement. Un JWT est un identifiant au porteur : quiconque en détient un non expiré peut généralement l'utiliser. Cette page décode et vérifie dans votre navigateur et n'envoie jamais le jeton nulle part, ce que vous pouvez vérifier vous-même en ouvrant l'onglet Réseau des outils de développement de votre navigateur avant de coller. Malgré tout, privilégiez des jetons expirés ou de test quand c'est possible, et ne collez jamais un secret de signature de production ni une clé privée sur un site que vous ne pouvez pas inspecter.

N'importe qui peut-il lire la charge utile d'un JWT ?+

Oui. Un JWT signé est encodé, pas chiffré. base64url est un encodage de texte réversible et sans clé, donc quiconque voit le jeton peut lire chacun de ses claims. Ne mettez jamais dans la charge utile d'un JWT des mots de passe, des clés d'API ou des données personnelles que vous ne montreriez pas à tous les détenteurs du jeton. Si les claims doivent rester privés, le jeton doit être un JWE, qui est chiffré.

Que signifient exp, iat et nbf ?+

Ce sont des NumericDate : des secondes entières ou fractionnaires écoulées depuis le 1970-01-01 00:00:00 UTC, et non des millisecondes. exp est le moment après lequel le jeton doit être refusé, nbf le moment avant lequel il doit être refusé, et iat le moment où il a été émis. Par exemple, exp 1767225600 correspond au 2026-01-01 00:00:00 UTC. Beaucoup de vérificateurs tolèrent un léger décalage d'horloge, généralement entre zéro et cinq minutes. Une valeur à 13 chiffres est presque toujours un horodatage en millisecondes écrit par erreur, et cette page le signale.

Quelle est la différence entre HS256 et RS256 ?+

HS256 est un HMAC avec SHA-256. Un seul secret partagé sert à la fois à signer et à vérifier, donc tout service capable de vérifier un jeton peut aussi en créer un. RS256 est une signature RSA avec SHA-256. L'émetteur signe avec une clé privée et n'importe qui vérifie avec la clé publique, que les fournisseurs publient généralement sous forme d'ensemble JWK. HS256 convient à un système unique qui émet et vérifie ses propres jetons ; RS256, ES256 ou EdDSA conviennent aux jetons qui franchissent une frontière de confiance, comme entre un fournisseur d'identité et de nombreuses API.

Pourquoi alg none est-il dangereux ?+

alg none désigne un JWT non sécurisé : le segment de signature est vide, donc n'importe qui peut y écrire les claims de son choix. La spécification autorise ces jetons, mais un vérificateur qui les accepte, ou qui laisse l'en-tête du jeton choisir l'algorithme à utiliser, peut se voir présenter un jeton falsifié. Configurez votre bibliothèque JWT avec les algorithmes exacts que vous attendez et refusez tout le reste, none compris.

Comment vérifier la signature d'un JWT ?+

Recalculez-la ou vérifiez-la sur les deux premiers segments, exactement tels qu'ils apparaissent dans le jeton (l'en-tête, un point, puis la charge utile), avec la bonne clé. Pour HS256, cette clé est le secret partagé ; pour RS256, PS256, ES256 ou EdDSA, c'est la clé publique de l'émetteur, généralement disponible au jwks_uri indiqué dans le document /.well-known/openid-configuration du fournisseur. Collez l'un ou l'autre dans le vérificateur ci-dessus. Un vrai vérificateur contrôle ensuite aussi exp, nbf, iss et aud, car une signature valide prouve seulement qui a créé le jeton, pas qu'il est encore acceptable.

Faut-il utiliser un JWT ou un cookie de session ?+

Un cookie de session classique contient un identifiant aléatoire que le serveur recherche dans son propre stockage : la déconnexion ou la révocation d'un accès prend donc effet immédiatement. Un JWT transporte ses claims avec lui, donc tout service qui détient la clé peut le vérifier sans recherche, mais il reste valide jusqu'à exp même après la déconnexion de l'utilisateur, sauf si vous ajoutez une liste de révocation. Beaucoup de sites utilisent des JWT de courte durée entre services et une session côté serveur pour le navigateur. Les deux ne s'excluent pas : un JWT peut lui-même être stocké dans un cookie.

Qu'est-ce qu'un JWE ?+

Un jeton JSON Web Encryption (RFC 7516) est chiffré, et pas seulement signé. Sa forme compacte compte cinq segments : en-tête protégé, clé chiffrée, vecteur d'initialisation, texte chiffré et tag d'authentification. Seul l'en-tête est lisible ; les claims se trouvent dans le texte chiffré et il faut la clé privée ou la clé partagée du destinataire pour les déchiffrer. Cette page reconnaît un JWE, affiche son en-tête et indique clairement que les claims ne peuvent pas être lus sans la clé.

D'autres outils ciblés, prêts quand vous l'êtes.

Découvrez une collection grandissante pour les calculs, les documents, la rédaction et le travail de tous les jours.

Voir tous les outils