01Qu'y a-t-il dans un JWT ?
Un JWT (JSON Web Token) transporte des informations signées entre deux parties : trois segments encodés en base64url, séparés par des points. L'en-tête décrit l'algorithme de signature, le payload contient les « claims » (identité, rôles, dates de validité), et la signature garantit que le contenu n'a pas été modifié. Point essentiel : le contenu est encodé, pas chiffré — n'importe qui peut le lire, c'est précisément ce que fait cette page.
Ce décodeur fonctionne entièrement dans votre navigateur — pratique pour déboguer une authentification (pourquoi ce 401 ?), inspecter les rôles d'un jeton, ou vérifier une expiration. La signature HMAC (HS256/384/512) est vérifiable en collant le secret, via l'API WebCrypto — comme nos générateurs de mots de passe et de clé DKIM, rien n'est transmis.
02Comprendre les claims standards
- exp
- Date d'expiration (timestamp Unix). Passée cette date, le serveur doit rejeter le jeton. L'alerte principale de ce décodeur.
- iat / nbf
- iat : date d'émission. nbf (not before) : le jeton est invalide avant cette date — utile pour des jetons pré-générés.
- iss / aud
- iss : qui a émis le jeton (l'URL du serveur d'authentification). aud : à qui il est destiné — un serveur doit refuser un jeton dont l'audience n'est pas lui.
- sub
- Le sujet, généralement l'identifiant de l'utilisateur authentifié.
- alg
- Dans l'en-tête : l'algorithme de signature. HS256 = HMAC avec secret partagé ; RS256/ES256 = signature asymétrique avec paire de clés ; none = non signé (danger).
- kid
- Dans l'en-tête : l'identifiant de la clé utilisée, pour que le serveur retrouve la bonne clé publique de vérification (rotation).
03Décoder n'est pas faire confiance
Lire un jeton ne prouve rien : seule la vérification de la signature garantit qu'il a été émis par le bon serveur et n'a pas été altéré. Côté serveur, il faut aussi valider exp, aud et iss — un jeton parfaitement signé mais expiré ou destiné à un autre service doit être rejeté.
Deux pièges classiques : accepter alg=none (jeton non signé) parce que la bibliothèque le permet par défaut, et confondre encodage et chiffrement — ne mettez jamais de secret (mot de passe, clé API) dans un payload JWT : tout le monde peut le lire, comme cette page vous le montre.
04Questions fréquentes
Est-ce prudent de coller un jeton ici ?
Le décodage se fait entièrement dans votre navigateur : aucune requête réseau ne part de cette page, ce qui se vérifie dans l'onglet Réseau des outils de développement. Cela dit, la prudence de base reste valable : un jeton de production en cours de validité est un sésame — évitez de le coller où que ce soit hors de vos propres outils, et privilégiez des jetons de test ou expirés quand c'est possible.
Pourquoi la signature RS256 n'est-elle pas vérifiable ici ?
HS256 signe avec un secret partagé : quiconque connaît le secret peut vérifier, c'est ce que fait cette page via WebCrypto. RS256, ES256 et consorts signent avec une clé privée et se vérifient avec la clé publique correspondante, généralement publiée par le serveur d'authentification à une URL JWKS. La récupérer nécessiterait une requête réseau — contraire à la promesse « rien ne part de cette page ».
Un JWT peut-il être révoqué ?
Pas nativement : c'est sa faiblesse structurelle. Un jeton signé reste valide jusqu'à son exp, même si l'utilisateur est banni entre-temps. Les parades : des jetons d'accès courts (5–15 minutes) renouvelés par un refresh token révocable, ou une liste de révocation côté serveur — qui réintroduit l'état que le JWT prétendait éliminer.
JWT ou cookie de session : que choisir ?
La session en base avec un cookie httpOnly reste le choix le plus simple et le plus sûr pour une application web classique : révocation immédiate, pas de données côté client. Le JWT brille quand plusieurs services doivent vérifier l'identité sans partager une base de sessions (microservices, API tierces, mobile). Le pire des deux mondes : stocker un JWT longue durée dans localStorage, exposé au moindre XSS.
Que signifie l'attaque « alg none » ?
La spécification JWT autorise alg=none pour les jetons non signés. Certaines bibliothèques historiques acceptaient un jeton où l'attaquant avait simplement remplacé alg par none et supprimé la signature — permettant de forger n'importe quelle identité. Les bibliothèques modernes exigent une liste blanche d'algorithmes ; si ce décodeur affiche alg=none sur un jeton accepté par votre serveur, corrigez d'urgence.
05Autres outils
Dev & encodage
Timestamp UnixConvertir un timestamp epoch en date et inversement, en direct Expressions cronDécoder une expression crontab et calculer les prochaines exécutions Base64Encoder et décoder du Base64 (UTF-8, URL-safe), sans rien envoyer Empreintes MD5/SHACalculer le hash d'un texte ou d'un fichier (MD5, SHA-256…), en local Générateur UUIDGénérer des UUID v4 aléatoires ou v7 ordonnés par le tempsMon IP & réseau — BGP / RPKI · Sous-réseau · Test de port
DNS & domaines — Test DNS · Propagation DNS · Whois · Punycode / IDN
Email — Score email · Test email · En-têtes d'email · Liste noire · Générateur DMARC · Clé DKIM
Web & SEO — Audit de page · En-têtes HTTP · En-têtes sécurité · Aperçu de partage · Test robots.txt · Certificats TLS · Redirections · Site en panne ? · User-Agent
Confidentialité & mots de passe — Fuite WebRTC · Mots de passe · Fuite de mot de passe