Développeur 🔒 Fonctionne dans votre navigateur — aucune donnée envoyée

Décodeur JWT

Décodez des JSON Web Tokens localement et vérifiez leur signature avec votre secret ou clé publique, sans rien envoyer.

Jeton JWT
Secret ou clé publique
La clé est utilisée dans votre navigateur et n’est envoyée nulle part.
Décodé
En-tête

          
        
Charge utile

        
Signature

Signez votre propre jeton pour tester un point d’accès. Tout est calculé dans cette page.

Clé de signature

La clé et le jeton obtenu restent dans votre navigateur : rien n’est envoyé nulle part, et rien de tout cela ne figure dans un lien partagé.

Décodeur JWT - décoder un JSON Web Token en ligne

Collez un JSON Web Token : ce décodeur le sépare en trois parties et affiche l'en-tête et la charge utile sous forme de JSON lisible. C'est le moyen le plus rapide de répondre aux questions qui surgissent pendant le débogage d'une authentification - qui a émis ce jeton, à qui est-il destiné, quel algorithme l'a signé et a-t-il déjà expiré ?

Le décodage se fait entièrement dans votre navigateur. Cela compte davantage ici qu'ailleurs, car un JWT est un identifiant actif : quiconque intercepte un jeton valide peut généralement agir au nom de son sujet jusqu'à son expiration. Rien de ce que vous collez sur cette page n'est téléversé, journalisé ou conservé.

Schéma : un JWT découpé à ses deux points en en-tête, payload et signature ; l'en-tête et le payload se décodent en JSON lisible, la signature est un HMAC des deux.eyJhbGciOiJIUzI1NiIs….eyJzdWIiOiIxMjM0NTY3….2N-E3ZkgLmbR…En-têtePayload (claims)Signature{ "alg": "HS256", "typ": "JWT"}{ "sub": "1234567890", "name": "Ada Lovelace", "iat": 1700000000, "exp": 1700003600}HMACSHA256( header + "." + payload, secret)JSON en Base64URL : lisible par tousJSON en Base64URL : lisible par tousVérifiée avec la clé secrète
Un JWT, ce sont trois chaînes Base64URL reliées par des points. L'en-tête et le payload sont du JSON ordinaire que n'importe qui peut décoder : un jeton ne doit donc jamais contenir de secret. Seule la signature, vérifiée avec la clé, montre que le jeton n'a pas été modifié.

Qu'est-ce qu'un JSON Web Token ?

Un JWT se compose de trois segments Base64URL reliés par des points : header.payload.signature. L'en-tête indique l'algorithme de signature, la charge utile porte les claims - les affirmations de l'émetteur au sujet de l'utilisateur ou du client - et la signature prouve que les deux premières parties ont été produites par le détenteur de la clé. Comme l'en-tête et la charge utile sont seulement encodés et non chiffrés, tout le monde peut les lire. Seule la signature est protégée.

Comment décoder un JWT ici

  1. Copiez le jeton depuis l'en-tête Authorization: Bearer, un cookie, une URL de callback ou votre client d'API.
  2. Collez la chaîne complète header.payload.signature dans le champ de saisie.
  3. Cliquez sur Décoder pour afficher les deux objets JSON.
  4. Si la requête a été refusée, regardez d'abord exp, puis aud et iss.

Ce que la page fait aussi

Le jeton est lu au fil de la frappe : les volets se remplissent avant même que vous cherchiez le bouton. Sous l’en-tête et la charge utile décodés, chaque champ figure dans un tableau avec son rôle en mots simples, et une ligne au-dessus transforme exp et nbf en phrases : expiré il y a trois jours, expire dans cinquante-huit minutes, pas encore valide.

  • Exemple charge un jeton de démonstration et son secret, pour voir une vérification réussir avant de coller quoi que ce soit à vous.
  • Vérifier accepte le secret, une clé publique PEM, un JWK isolé ou un JWKS complet. Collez le document servi à l'adresse /.well-known/jwks.json de l'émetteur : la clé désignée par le kid du jeton est choisie automatiquement, et la page n'envoie toujours aucune requête. Remplissez aussi Émetteur attendu et Audience attendue, et une signature valide est contrôlée comme sur un serveur : un autre iss, ou un aud qui ne contient pas votre valeur, fait passer le résultat au rouge.
  • Créer un jeton signe le vôtre avec l’un des douze algorithmes — la page générateur de JWT s’ouvre dessus.
  • Code affiche la vérification côté serveur dans huit langages, selon l’algorithme indiqué dans l’en-tête de votre jeton.
  • Deux autres pages ouvrent cet outil sur une seule question : a-t-il expiré et pourquoi est-il refusé.

Les claims standard et leur signification

ClaimSignificationCause d'échec fréquente
issÉmetteur du jetonNe correspond pas quand un jeton de recette part en production
subSujet, généralement l'identifiant utilisateur ou serviceVide pour les jetons émis à un client plutôt qu'à une personne
audAudience : l'API censée l'accepterLa cause la plus courante d'un 401 avec un jeton pourtant valide
expExpiration sous forme d'horodatage UnixDéjà passée, ou horloge serveur décalée
nbfNon valide avant cet instantJeton utilisé quelques secondes trop tôt
iatDate d'émissionSert aux politiques d'ancienneté maximale et aux fenêtres de révocation
jtiIdentifiant unique du jetonNécessaire pour révoquer un jeton précis

Décoder n'est pas vérifier

C'est le point qui prête le plus à confusion. Lire un jeton vous dit ce qu'il affirme, pas si l'affirmation est authentique. Vérifier signifie recalculer la signature avec le secret ou la clé publique de l'émetteur puis la comparer, en contrôlant aussi l'expiration et l'audience. N'importe quel décodeur affichera la charge utile d'un jeton falsifié aussi volontiers que celle d'un vrai : ne fondez jamais une décision d'autorisation sur le seul contenu décodé, vérifiez côté serveur avec une bibliothèque maintenue.

Diagnostiquer un jeton qui ne passe pas

  • 401 avec un jeton valide : comparez aud à ce qu'attend l'API et iss à l'URL d'émetteur configurée. Saisissez-les dans Émetteur attendu et Audience attendue, puis cliquez sur Vérifier : le résultat affiche la valeur que porte réellement le jeton.
  • Expiré immédiatement : convertissez exp avec le convertisseur de timestamp Unix et comparez-le à l'horloge du serveur, pas à celle de votre poste.
  • Erreur de segment invalide : le jeton a été tronqué, encodé en URL en chemin, ou un retour à la ligne s'est glissé lors du copier-coller.
  • Échec de la vérification de signature : la clé a tourné, le mauvais identifiant de clé a été utilisé, ou le jeton vient d'un autre environnement.
  • alg vaut none : refusez-le. Cette valeur désigne un jeton non signé et constitue une attaque classique contre les validations négligentes.

Bonnes habitudes de sécurité

  • Ne placez jamais de données personnelles, d'identifiants internes ou d'informations confidentielles dans la charge utile : elle est lisible par conception.
  • Gardez des jetons d'accès à courte durée de vie et utilisez un jeton de rafraîchissement pour les sessions longues.
  • Transmettez les jetons uniquement en HTTPS et privilégiez les cookies secure et HttpOnly au stockage navigateur.
  • Faites tourner les clés de signature régulièrement et publiez-les via un point JWKS pour que les clients suivent.
  • Considérez comme exposé tout jeton collé dans un outil en ligne - c'est précisément pour cela que celui-ci ne l'envoie nulle part.

Fonctionne hors ligne dans votre navigateur

Le décodeur est du JavaScript côté client. Une fois la page chargée, vous pouvez décoder des jetons sans aucune connexion réseau, et les identifiants de production ne quittent jamais votre machine.

Décoder un JWT en code ou en ligne de commande

OùComment
JavaScript (npm)import { jwtDecode } from 'jwt-decode'; jwtDecode(token) - le payload seulement, sans vérification
Python (PyJWT)jwt.decode(token, options={'verify_signature': False}) pour lire, ou passez la clé pour vérifier
Bashecho $TOKEN | cut -d. -f2 | tr '_-' '/+' | base64 -d 2>/dev/null - le Base64URL omet le remplissage, un payload court peut donc avoir besoin d'un == final
Console du navigateurJSON.parse(atob(token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')))

Chacune de ces méthodes lit le token sans contrôler la signature - parfait pour déboguer, faux pour autoriser ; voir la section plus haut.

Outils complémentaires

Les jetons se situent au croisement de plusieurs formats. Lisez les segments bruts avec le décodeur Base64, mettez en forme la charge utile avec le formateur JSON, transformez exp et iat en dates avec le convertisseur de timestamp et nettoyez un jeton extrait d'une URL avec le décodeur d'URL.

Guides associés