Qu'est-ce qu'un JWT ? Structure, claims et décodage

Qu'est-ce qu'un JWT

Qu'est-ce qu'un JWT ? Structure, claims et décodeur privé | We.Inc

Les JSON Web Tokens expliqués : header, payload et signature, les sept claims enregistrés de la RFC 7519, les pièges de sécurité, et un décodeur qui n'envoie jamais votre jeton nulle part.

Un JWT (JSON Web Token) est une chaîne compacte et compatible avec les URL, composée de trois parties en base64url séparées par des points : un header qui indique l'algorithme, un payload de claims comme sub et exp, et une signature. N'importe qui peut décoder et lire le payload ; seule la signature, vérifiée avec la bonne clé, prouve que personne ne l'a modifié.

Noms de claims enregistrés (RFC 7519, section 4.1)

Collez un jeton dans le décodeur ci-dessous pour voir son header et son payload, avec chaque claim enregistré expliqué et chaque horodatage converti en date lisible. Le décodage se fait dans le JavaScript de cette page, le jeton n'est donc jamais envoyé. C'est important, car un jeton actif est une clé vers le compte de quelqu'un.

Questions fréquentes

Est-il sûr de décoder un JWT en ligne ?

Seulement si le décodage se fait dans votre navigateur. Le jeton est un identifiant : quiconque en détient un valide peut appeler l'API en tant que cet utilisateur jusqu'à son expiration. Le décodeur de cette page s'exécute en local et n'envoie rien, mais pour les jetons de production, le plus sûr est de ne décoder que des jetons de test.

Un JWT est-il chiffré ?

Un JWT signé classique (un JWS) ne l'est pas. Son payload est seulement encodé en base64url, ce que n'importe qui peut inverser. Les jetons chiffrés existent sous forme de JWE, avec cinq parties séparées par des points au lieu de trois, mais la plupart des jetons de connexion et d'API sont signés, pas chiffrés.

Dans quel format sont exp et iat ?

NumericDate : des secondes entières depuis 1970-01-01T00:00:00Z, sans tenir compte des secondes intercalaires. Date.now() en JavaScript renvoie des millisecondes, il faut donc diviser par 1000 avant de comparer, un bug très fréquent.

Faut-il stocker un JWT dans localStorage ou dans un cookie ?

N'importe quel script qui tourne sur la page peut lire localStorage, donc une seule faille de cross-site scripting peut voler le jeton. Un cookie HttpOnly, Secure et SameSite le tient à l'écart des scripts, au prix d'une gestion du CSRF. Beaucoup d'équipes choisissent le cookie pour les sessions navigateur.

Peut-on déconnecter un utilisateur avec un JWT ?

Pas à lui seul, car le jeton reste valide jusqu'à exp. Utilisez une expiration courte avec des refresh tokens révocables, ou tenez une liste de blocage de valeurs jti pour les jetons qui doivent expirer plus tôt.

Les trois parties

Algorithmes de signature

Les pièges qui causent encore des failles

Décoder et vérifier dans le code

Décoder un payload en JavaScript pur

Lit les claims sans les vérifier. Convient pour afficher un nom d'utilisateur dans l'interface, jamais pour décider d'un accès.

Vérifier côté serveur avec jose

jwtVerify vérifie la signature, exp et nbf, et avec ces options aussi l'émetteur, l'audience et l'algorithme autorisé.

Décodeur JWT privé

Collez un jeton pour lire son header et son payload. Le décodage s'exécute dans votre navigateur ; le jeton n'est ni envoyé, ni stocké, ni journalisé.

Qui a émis le jeton

La personne concernée par le jeton, en général un identifiant utilisateur

Quels destinataires doivent l'accepter

Rejeter à partir de cette date

Rejeter avant cette date

Date de création du jeton

Un identifiant unique, utile pour bloquer la réutilisation

JWT

Charger un jeton d'exemple

Effacer

Header

Payload

Signature (non vérifiée ici)

Claims expliqués

Claim

Valeur

Signification

Claim personnalisé

Un JWT signé comporte 3 parties séparées par des points ; celui-ci en a {n}.

5 parties signifient un JWE chiffré, illisible sans la clé.

La partie {n} n'est pas du JSON base64url valide.

Expiré {v}

Valide jusqu'au {v}

Pas valide avant le {v}

alg vaut none : ce jeton n'a pas de signature et doit être rejeté.

Décodé en local. Rien ne quitte cette page.

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site