Aller au contenu
Toolbrik
Retour au blog

Qu'est-ce qu'un JWT et comment le décoder sans bibliothèque

8 septembre 2026 · Outil associé: Décodeur JWT

Un JWT (JSON Web Token) apparaît dans presque toutes les API modernes : dans l'en-tête Authorization: Bearer ..., dans les cookies de session, ou dans les jetons tiers (OAuth, SSO). Et pourtant, beaucoup n'ont jamais regardé ce qu'il y a dedans.

Les trois parties

Un JWT, ce sont trois blocs Base64URL séparés par des points : header.payload.signature.

  1. Header — l'algorithme de signature (HS256, RS256...) et le type de jeton.
  2. Payload — les claims : des données comme sub (sujet), exp (expiration), iat (émis le), et tout champ personnalisé ajouté par le backend.
  3. Signature — le hash qui garantit que le header et le payload n'ont pas été modifiés depuis la signature.

Collez-le dans le décodeur JWT et vous verrez le header et le payload déjà transformés en JSON lisible, avec la date d'expiration convertie en quelque chose d'humain plutôt qu'en timestamp Unix brut.

Décoder n'est pas vérifier

C'est le point qui prête le plus à confusion : n'importe qui peut décoder un JWT, car le header et le payload sont seulement encodés en Base64URL, pas chiffrés. Les ouvrir ne nécessite pas la clé secrète.

Ce qui nécessite la clé (ou la clé publique, en RS256), c'est vérifier la signature — confirmer que le jeton n'a pas été altéré et qu'il a bien été émis par celui qui prétend l'avoir émis. Un décodeur en ligne vous montre le contenu, mais vous ne devriez jamais faire confiance au JWT de quelqu'un d'autre sans que votre backend en vérifie d'abord la signature.

Pourquoi il expire

Le claim exp est une date d'expiration en secondes depuis l'epoch Unix. Si votre session "se déconnecte toute seule" régulièrement, c'est presque toujours pour ça : le jeton a expiré et le client ne l'a pas rafraîchi à temps. Comparez avec le convertisseur de timestamp Unix si vous devez faire le calcul à la main.

Quand se méfier d'un jeton

  • Si le alg du header est none — cela signifie que l'émetteur ne signe rien du tout, une faille classique si le backend ne la rejette pas explicitement.
  • S'il n'y a pas de exp — le jeton n'expire jamais, ce qui est rarement intentionnel.
  • Si le payload contient des données sensibles en clair (mots de passe, numéros de carte) — un JWT n'est pas un conteneur chiffré, il ne devrait rien contenir qui ne puisse être vu.

En résumé : utilisez le décodeur pour déboguer et comprendre, mais la vraie validation d'un JWT passe toujours par votre serveur.