Contact

Outil gratuit · 100 % navigateur

JWT Inspector

Décodez l’en-tête et la charge utile d’un JSON Web Token, vérifiez une signature HMAC et repérez les configurations à risque (alg none, expiration).
Traitement local Aucune donnée envoyée Sans compte

Structure

en-têtecharge utilesignature

Vérifier la signature HMAC

Saisissez le secret partagé pour vérifier un jeton HS256, HS384 ou HS512.

Analyse de sécurité

    en-tête
    charge utile

    Claims

    ClaimValeur
    Signer un nouveau jetonHS256, HS384 ou HS512, à partir d’un en-tête et d’une charge utile modifiés.

    jeton signé

    Anatomie d’un JWT

    Un JSON Web Token (RFC 7519) transporte des affirmations, appelées claims, entre deux parties. Sous sa forme la plus répandue, la signature JWS compacte (RFC 7515), il se compose de trois segments séparés par des points : l’en-tête, la charge utile et la signature. L’en-tête indique l’algorithme (alg) et parfois la clé à utiliser (kid). La charge utile contient les claims : sujet, émetteur, audience, dates. La signature couvre les deux premiers segments et garantit qu’ils n’ont pas été modifiés.

    Chaque segment est encodé en base64url : l’alphabet base64 où + et / deviennent - et _, sans caractère de remplissage =. Cet encodage ne protège rien. Toute personne qui intercepte le jeton lit son contenu, d’où l’intérêt de ne jamais y placer de mot de passe ou de donnée personnelle sensible.

    Les attaques classiques

    alg « none »

    La spécification prévoit un jeton non signé, avec "alg": "none". Des bibliothèques ont longtemps accepté ces jetons dès lors que l’en-tête le demandait. Un attaquant modifiait alors la charge utile, retirait la signature, et le serveur l’acceptait.

    Confusion d’algorithme RS256 vers HS256

    Un serveur qui vérifie en RS256 détient une clé publique. Si la bibliothèque laisse l’en-tête choisir l’algorithme, l’attaquant signe un jeton en HS256 en prenant cette clé publique comme secret HMAC. Le serveur vérifie avec la même clé et valide le jeton forgé. La parade consiste à fixer l’algorithme attendu côté serveur.

    Secrets faibles

    Un jeton HS256 permet de tester des secrets hors ligne, sans limite de débit : il suffit d’un seul jeton valide. hashcat (mode 16500) ou jwt_tool trouvent en quelques secondes les secrets issus de tutoriels ou de fichiers d’exemple. Un secret HMAC doit être aléatoire et faire au moins 256 bits.

    Injection par kid, jku et x5u

    Le paramètre kid sert souvent à chercher une clé dans un fichier ou une base. Sans validation, il devient un vecteur de path traversal (../../dev/null pour obtenir une clé vide) ou d’injection SQL. Les paramètres jku et x5u désignent une URL où récupérer la clé : un serveur qui les suit sans liste blanche télécharge la clé de l’attaquant.

    Absence d’expiration

    Sans claim exp, un jeton volé dans un log, un historique de navigateur ou un dépôt Git reste valide indéfiniment. Comme un JWT se révoque mal, l’expiration courte est la principale protection.

    Bonnes pratiques

    • Fixez côté serveur la liste des algorithmes acceptés et refusez none.
    • Vérifiez systématiquement exp, nbf, iss et aud.
    • Utilisez un secret HMAC aléatoire d’au moins 256 bits, ou une paire de clés asymétriques quand plusieurs services vérifient les jetons.
    • Ne placez dans la charge utile que des identifiants et des rôles, jamais de secret.
    • Validez kid contre une liste fermée et ignorez jku, x5u et jwk si vous n’en avez pas besoin.

    ?Questions fréquentes

    Mon jeton est-il envoyé à un serveur ?

    Le décodage, la vérification HMAC et le test des secrets courants s’exécutent dans votre navigateur avec l’API WebCrypto. Aucune requête ne part avec le jeton ou le secret. Un jeton de production reste un identifiant : évitez de le coller dans des outils que vous ne contrôlez pas, et révoquez-le en cas de doute.

    Un JWT est-il chiffré ?

    Un JWS, la forme la plus courante, est seulement signé. L’en-tête et la charge utile sont encodés en base64url et lisibles par toute personne qui détient le jeton. Le chiffrement correspond au format JWE, à cinq segments, que l’on reconnaît à son en-tête contenant « enc ».

    Peut-on vérifier ici un jeton RS256 ou ES256 ?

    Ces algorithmes demandent la clé publique de l’émetteur, généralement publiée dans un fichier JWKS. L’outil se limite à la vérification HMAC (HS256, HS384, HS512) avec un secret partagé. Il signale en revanche les en-têtes kid, jku, x5u et jwk qui ouvrent des attaques sur le choix de la clé.

    Que signifie « secret trouvé dans les secrets courants » ?

    L’outil teste une trentaine de secrets vus dans des tutoriels, des valeurs par défaut et des fuites (secret, changeme, your-256-bit-secret…). Si l’un d’eux valide la signature, n’importe qui peut forger des jetons acceptés par votre service. La liste est courte : un secret absent de la liste peut rester faible, et un outil comme hashcat (mode 16500) testera bien plus de candidats.

    Quelle durée de vie choisir pour un JWT ?

    Pour un jeton d’accès, quelques minutes à une heure. Un JWT ne se révoque pas facilement : sa sécurité repose sur une expiration courte, complétée par un refresh token stocké côté serveur et révocable.

    +Autres outils