Aucun upload, 100 % local, sans compte

Tutoriel

Comment décoder un JWT sans le divulguer

Un jeton JWT transporte de vraies données : l'utilisateur auquel il a été délivré, les autorisations qu'il accorde, sa date d'expiration. Le coller dans un décodeur en ligne quelconque revient à confier ces données, et souvent une session encore valide, à un serveur que vous ne contrôlez pas. Le décodeur ci-dessous tourne entièrement dans votre navigateur : vous pouvez lire le contenu d'un jeton, vérifier s'il a expiré et confirmer une signature HMAC quand vous connaissez le secret, le tout sans qu'une seule requête réseau ne quitte votre onglet.

Pas à pas

  1. Ouvrez le décodeur de JWT et collez votre jeton dans le champ de saisie. Un JWT, ce sont trois blocs en Base64Url séparés par des points : l'en-tête, la charge utile et la signature. Vous pouvez le coller avec le préfixe Bearer ou sans ; l'outil lit la structure dans les deux cas et vous signale aussitôt si le format est invalide.
  2. Lisez l'en-tête et la charge utile décodés. L'en-tête indique l'algorithme de signature (par exemple HS256 ou RS256) et l'identifiant de clé s'il est présent. La charge utile liste les claims : pour qui le jeton a été émis (sub), qui l'a émis (iss) et les horodatages. L'outil convertit les champs numériques iat, nbf et exp en dates lisibles et signale si le jeton est encore valide ou déjà expiré.
    Un JWT décodé montrant l'algorithme de l'en-tête et les claims de la charge utile avec des dates d'émission et d'expiration lisibles
  3. Si le jeton utilise HS256 et que vous détenez le secret partagé, collez ce secret dans le champ de vérification puis cliquez sur Vérifier. L'outil recalcule le HMAC sur l'en-tête et la charge utile et le compare à la signature : vous savez ainsi si le jeton est authentique ou a été altéré. Pour les jetons RS256 ou ES256, la signature repose sur une clé privée que vous n'avez pas ; l'outil inspecte donc les claims mais ne prétend pas vérifier la signature.
    Le champ de vérification HMAC rempli avec le secret partagé et un badge de signature valide pour un jeton HS256

Pourquoi ne jamais coller un jeton sur un site quelconque

Un JWT n'est pas chiffré. L'en-tête et la charge utile sont seulement encodés en Base64Url, ce qui veut dire que quiconque reçoit le jeton peut lire chaque claim qu'il contient : adresse e-mail, identifiant d'utilisateur, rôles, indicateurs internes. Si le jeton est un jeton d'accès qui n'a pas encore expiré, celui qui le détient peut le rejouer et agir à votre place jusqu'à son expiration. En collant un jeton actif dans un décodeur hébergé, vous envoyez tout cela vers les journaux de ce serveur. Décoder le jeton sur votre propre machine, sans aucun envoi, est la seule façon de l'inspecter sans élargir le cercle des personnes qui peuvent le voir. Vous pouvez confirmer l'absence de trafic en ouvrant le panneau réseau pendant le décodage.

Ce que la signature peut et ne peut pas vous dire

La signature est ce qui empêche quelqu'un de modifier les claims sans se faire prendre. Pour un jeton HS256, le même secret signe et vérifie : si vous connaissez le secret, vous pouvez confirmer pleinement l'authenticité du jeton ici même. Pour les jetons RS256 et ES256, une clé privée signe le jeton et seule la clé publique correspondante le vérifie ; la clé privée ne quitte jamais l'émetteur, donc un outil côté client peut lire les claims mais ne peut pas prouver honnêtement la signature sans cette clé publique. Considérez la charge utile décodée comme une affirmation faite par l'émetteur, pas comme une preuve, tant que la signature n'est pas contrôlée par le détenteur de la clé de vérification. Pour hacher ou comparer des secrets à part, le générateur de hash de ce site fonctionne aussi en local.

Structure d'un JWT et ce que chaque partie révèle

Un JWT est composé de trois segments encodés en Base64url séparés par des points : en-tête, charge utile et signature. L'en-tête déclare le type de token ("JWT") et l'algorithme : HS256 (HMAC-SHA-256, un secret partagé) ou RS256 (RSA-SHA-256, une paire clé publique/privée) sont les plus courants. La charge utile contient des déclarations comme `sub` (sujet, généralement un identifiant utilisateur), `iat` (horodatage Unix d'émission), `exp` (horodatage Unix d'expiration), `aud` (audience ciblée), et des déclarations applicatives personnalisées comme les rôles ou les portées. Base64url n'est pas du chiffrement : c'est une variante de Base64 compatible URL qui remplace `+` par `-` et `/` par `_`, et omet le rembourrage. Toute personne qui possède la chaîne du token brut peut décoder l'en-tête et la charge utile sans la clé de signature. Seul le segment de signature requiert la clé pour la vérification. C'est pourquoi coller un token de production actif dans un décodeur en ligne externe est un risque de sécurité : si le `exp` du token est encore dans le futur et que le service journalise l'entrée, la session qu'il représente peut être compromise.

Les outils utilisés dans ce guide

Questions fréquentes

Mon jeton est-il envoyé à un serveur quand je le décode ?

Non. Le décodeur découpe le jeton, décode l'en-tête et la charge utile en Base64Url et les affiche en mémoire. La vérification HMAC facultative s'appuie sur l'API Web Crypto intégrée à votre navigateur. Rien ne transite par le réseau, ce qui compte car un JWT contient souvent des données personnelles et une session encore active. Ouvrez le panneau réseau de votre navigateur pendant le décodage : vous ne verrez partir aucune requête.

Cet outil peut-il vérifier une signature RS256 ou ES256 ?

Pas entièrement, et il ne fera pas semblant. HS256 utilise un seul secret partagé pour signer et vérifier : coller ce secret permet à l'outil de confirmer la signature dans votre navigateur. RS256 et ES256 utilisent une clé privée pour signer et une clé publique distincte pour vérifier ; l'outil lit et valide les claims et l'expiration, mais s'arrête avant d'affirmer une signature qu'il ne peut pas contrôler. Pour ces jetons, vérifiez sur le service qui détient la clé publique.

Sources