Encodeur / décodeur JWT
Collez un jeton pour lire son en-tête et sa charge utile, ou signez-en un à partir de vos propres claims — sans bouton, sans envoi.
Facultatif en décodage (renseignez-le pour vérifier), obligatoire pour signer.
Signature :
Jeton
En-tête
Charge utile
Mode d’emploi
- Collez un jeton : l’en-tête et la charge utile apparaissent aussitôt, sans bouton à presser. Tout ce qui vient du jeton reste exactement tel qu’il a été signé — l’entrée n’est jamais réécrite.
- Ajoutez le secret sous le champ pour contrôler la signature. Le laisser vide signifie simplement « non vérifiée » : vous lisez quand même les claims tels quels.
- Passez en mode Encoder, écrivez vos claims en JSON, choisissez HS256/384/512 et un secret, puis copiez le jeton produit. Changer de mode n’efface jamais votre saisie.
- Les claims standard exp / iat / nbf sont explicités dans votre langue et votre fuseau horaire, avec les marques expiré et pas encore valide.
Exemple
Jeton
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTEwMjQiLCJuYW1lIjoiSmFuZSBDb29wZXIiLCJyb2xlIjoiZWRpdG9yIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6MTc5ODc2MTYwMH0.jCqliF6m-TAglXcHrjuXj7kYIjjsRO7kv6_8O1yb_7Q
En-tête et charge utile
En-tête
{
"alg": "HS256",
"typ": "JWT"
}
Charge utile
{
"sub": "u-1024",
"name": "Jane Cooper",
"role": "editor",
"iss": "https://api.example.com",
"iat": 1767225600,
"exp": 1798761600
}Signé avec le secret « dev-secret-change-me » ; saisissez-le dans Secret et la ligne d’état passe à « Signature vérifiée ». Passez en mode Encoder et cliquez sur Exemple pour retrouver la même charge utile : avec le même secret, le jeton est reconstruit à l’identique, caractère pour caractère.
Règles, limites et problèmes connus
- Seuls HS256, HS384 et HS512 sont pris en charge, en signature comme en vérification. Les jetons RS*, ES* et PS* sont décodés et affichés tels quels, mais leur signature n’est jamais contrôlée — cela exige une clé publique, la ligne d’état le dit donc au lieu de deviner.
- Les jetons non signés (alg: none) sont décodés et clairement signalés, mais jamais produits : demander une signature sans secret renvoie une erreur plutôt qu’un jeton non signé.
- L’encodage construit l’en-tête lui-même (`{"alg": … ,"typ": "JWT"}`). Les champs d’en-tête comme kid, jku, x5c ou cty ne sont pas repris — cet outil signe des claims, pas des chaînes de certificats.
- Votre JSON de claims est resérialisé de façon compacte avant signature : l’indentation et les commentaires restent hors du jeton. L’ordre des clés suit les objets JavaScript : les clés répétées s’effondrent sur la dernière, et les clés numériques passent devant.
- Les très grands entiers perdent en précision — `12345678901234567890` revient arrondi, car c’est le comportement des nombres JavaScript. Rien n’est corrigé en silence ; utilisez des chaînes quand les chiffres exacts comptent.
- Les claims sont affichés indentés pour la lecture, tandis que la signature couvre les segments bruts exactement tels qu’ils figurent dans le jeton. Rien n’est réencodé dans votre dos : un jeton vérifié ici le sera aussi dans votre propre code.
- Le base64url est strict : `+`, `/` et `=` sont signalés comme des erreurs au lieu d’être acceptés en silence, et les octets non UTF-8 sont signalés plutôt que remplacés par des caractères de substitution. Les espaces dans un jeton collé sont ignorés, car un jeton n’en contient jamais.
- Les JWE chiffrés (cinq parties) ne sont pas déchiffrés — l’outil vous indique simplement que c’est ce que vous avez collé.
- Limite de taille : 10 000 caractères. Rien n’est envoyé, stocké, écrit dans l’URL ni partagé : le bouton de partage ne partage que l’adresse de cette page, jamais votre jeton ni votre secret.
Outils associés
Une fois les claims lus, voici les étapes suivantes habituelles.