Décodeur JWT

Décodez l’en-tête et la charge utile d’un JWT dans le navigateur, vérifiez les dates exp/nbf/iat et les signatures HS256/384/512 ou RS256/384/512.

Vos saisies et fichiers restent dans le navigateur

Collez un JWT (header.payload.signature) ou chargez un jeton de démonstration.

Vérifier la signature

Décodé

L’en-tête, la charge utile et les dates apparaissent ici dès que vous collez un jeton.

Sur cette page

Collez un JSON Web Token pour voir son en-tête et sa charge utile en JSON formaté, l’algorithme de signature et les dates d’émission, de début de validité et d’expiration. Vous pouvez aussi vérifier la signature avec un secret partagé ou une clé publique RSA.

Fonctionnalité détaillée

Le décodage se fait pendant la saisie : l’en-tête et la charge utile sont décodés depuis base64url et mis en forme dans l’ordre d’origine des claims. Un préfixe Bearer et les sauts de ligne copiés depuis un en-tête HTTP sont retirés automatiquement. Les claims temporelles enregistrées exp, nbf et iat s’affichent comme des dates dans votre fuseau horaire, et un jeton expiré ou pas encore valide est signalé.

La vérification de signature s’exécute dans un module cryptographique Rust compilé en WebAssembly et utilise l’algorithme indiqué dans l’en-tête du jeton : HS256, HS384 et HS512 avec un secret partagé (utilisé comme texte UTF-8), RS256, RS384 et RS512 avec une clé publique RSA au format PEM (BEGIN PUBLIC KEY ou BEGIN RSA PUBLIC KEY). Vous pouvez aussi coller un JWK ou un JWKS (par exemple le /.well-known/jwks.json d’un fournisseur d’identité) : la clé est choisie d’après le kid du jeton (sans kid, toutes les clés compatibles avec l’algorithme sont essayées) et vérifiée avec la Web Crypto API du navigateur, ce qui couvre aussi PS256/384/512, ES256/384/512 et EdDSA (Ed25519). Un jeton alg: none est toujours signalé comme non signé, jamais comme valide.

Jetons et clés restent dans la page : rien n’est envoyé à un serveur ni enregistré. Rappel : décoder ne prouve rien sur l’authenticité — seule une signature vérifiée le fait.

Exemples pratiques

Exemple jwt.io : le jeton eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIi… se décode en en-tête {"alg":"HS256","typ":"JWT"} et en charge utile avec sub, name et iat ; le secret your-256-bit-secret donne « Signature vérifiée », tout autre secret « Signature invalide ».

Jeton expiré : une charge utile avec "exp": 1767225600 est marquée comme expirée le 1er janvier 2026 (affiché dans votre fuseau horaire).

Depuis un en-tête Authorization : collez Bearer eyJ… tel quel — le préfixe et les sauts de ligne sont retirés avant le décodage.

Jeton non signé : eyJhbGciOiJub25lIn0.eyJzdWIiOiIxIn0. se décode en {"alg":"none"} et {"sub":"1"} et est signalé comme non signé et non fiable.

Comment utiliser cet outil

  1. Collez le jeton

    Collez le JWT dans JWT encodé ; le décodage démarre immédiatement.

  2. Lisez l’en-tête et la charge utile

    Consultez l’En-tête et la Charge utile formatés, le badge de l’algorithme et les dates d’émission, de validité et d’expiration sous la charge utile.

  3. Vérifiez la signature

    Dans Vérifier la signature, saisissez le secret HMAC ou la clé publique PEM dans Secret / clé publique RSA. Le statut indique si la signature est valide.

Conseils et bonnes pratiques

  • N’importe qui peut décoder un JWT : ne mettez jamais de mot de passe ni d’autre secret dans la charge utile.
  • Le secret HMAC est utilisé exactement tel que saisi. Si votre backend le stocke encodé en base64, décodez-le d’abord — coller la chaîne base64 donne « Signature invalide ».
  • Pour un jeton RS*, collez la clé publique, pas la clé privée ; un certificat X.509 n’est pas accepté, extrayez-en d’abord la clé publique.
  • L’expiration est comparée à l’horloge de votre appareil : une heure système fausse donne une mention « expiré » fausse.
  • Besoin d’un jeton pour tester ? Créez-en un avec l’Encodeur JWT.