BrowserTools
Publicité
Accueil / Encodeurs / Décodeur JWT

Décodeur JWT

Décodez et inspectez des JSON Web Tokens localement : en-tête, charge utile et claims d'expiration.

Chargement de Décodeur JWT… Si rien ne se passe, activez JavaScript.

Un JSON Web Token (JWT) est une chaîne compacte et adaptée aux URL qui encode un ensemble signé de claims (des affirmations sur un utilisateur, une session ou une autorisation) dans un format que toute partie détenant la bonne clé peut vérifier de façon indépendante. Défini par le RFC 7519 (2015) et faisant partie de la famille de standards JOSE (signature et chiffrement d'objets JSON), les JWT sont rapidement devenus le mécanisme dominant pour l'authentification sans état et l'autorisation d'API dans les architectures web, mobiles et de microservices. Un JWT se compose de trois segments encodés en Base64url et séparés par des points : l'en-tête (métadonnées de l'algorithme), la charge utile (les claims) et la signature.

Exemples

Entrée eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.<sig>
Sortie Header {"alg":"HS256","typ":"JWT"} · Payload {"sub":"1234567890","name":"John Doe"}

Un JWT est composé de trois parties en Base64url réunies par des points : en-tête.charge_utile.signature.

Questions fréquentes

Mon jeton est-il envoyé à un serveur ?
Non. Le décodage se fait entièrement dans votre navigateur à l'aide de la fonction atob intégrée de JavaScript et de JSON.parse. Votre JWT, qui peut contenir l'identité de l'utilisateur, des autorisations ou des données de session, ne quitte jamais votre appareil et n'est jamais envoyé sur le réseau.
Quelles sont les trois parties d'un JWT ?
Un JWT est constitué de trois objets JSON encodés en Base64url et séparés par des points. L'en-tête déclare le type de jeton ('JWT') et l'algorithme de signature (par exemple HS256, RS256). La charge utile contient les claims : des champs standard comme iss (émetteur), sub (sujet), exp (expiration), iat (émis le), plus tout claim personnalisé de l'application. La signature est calculée par le serveur émetteur sur l'en-tête et la charge utile, et permet aux destinataires de vérifier que le jeton n'a pas été altéré.
Quand devrais-je utiliser un JWT dans ma propre application ?
Les JWT sont idéaux pour l'authentification sans état : une fois émis, le serveur n'a pas besoin de stocker l'état de la session, le jeton lui-même transporte tout ce qu'il faut pour autoriser une requête. Ils conviennent bien aux microservices et aux API où plusieurs services doivent vérifier l'identité sans partager une base de données de sessions. Ils fonctionnent bien pour des jetons d'accès de courte durée (minutes à heures). Pour des sessions de longue durée nécessitant une révocation instantanée, une session classique côté serveur avec consultation de base de données est souvent plus appropriée.
En quoi un JWT diffère-t-il d'un cookie de session ?
Un cookie de session stocke un identifiant opaque aléatoire ; le serveur recherche les véritables données de session dans une base de données à chaque requête. Un JWT est autonome : le serveur valide la signature et lit les claims directement dans le jeton, sans consultation de base de données. Les JWT sont donc plus rapides et plus faciles à faire évoluer horizontalement, mais plus difficiles à révoquer : vous ne pouvez pas « déconnecter » un JWT avant son expiration sans maintenir une liste de blocage de jetons, ce qui réintroduit de l'état côté serveur.
Cet outil vérifie-t-il la signature du JWT ?
Non, et c'est volontaire. La vérification de la signature nécessite la clé secrète de l'émetteur (pour les algorithmes HMAC comme HS256) ou sa clé publique (pour les algorithmes RSA/ECDSA comme RS256). Vous ne devriez jamais coller une clé secrète dans un outil tiers. Ce décodeur vous montre l'en-tête et les claims de la charge utile décodés à des fins d'inspection uniquement. Pour la vérification de signature en production, utilisez une bibliothèque de confiance dans votre propre environnement.
Que signifient les claims d'horodatage standard ?
iat (issued at) est l'horodatage Unix de la création du jeton. exp (expiration time) est l'horodatage après lequel le jeton doit être rejeté. nbf (not before) est l'horodatage avant lequel le jeton ne doit pas être accepté. Les trois sont exprimés en secondes depuis l'époque Unix (1er janvier 1970 UTC). Cet outil les convertit automatiquement en dates lisibles pour que vous voyiez instantanément si un jeton est expiré ou pas encore valide.
Un JWT peut-il être utilisé sans signature (alg: none) ?
La spécification JWT autorise techniquement un jeton non sécurisé avec 'alg': 'none' et une signature vide. Cependant, accepter de tels jetons en production est une vulnérabilité de sécurité critique. Plusieurs premières bibliothèques JWT faisaient confiance à 'alg': 'none' par défaut, permettant aux attaquants de forger des jetons arbitraires. Configurez toujours votre bibliothèque JWT pour exiger un algorithme précis et rejeter les jetons avec 'alg': 'none', sauf si vous avez une raison très précise d'autoriser les jetons non signés.
Les charges utiles des JWT sont-elles privées et confidentielles ?
Non. Un JWT standard (JWS, signature web JSON) signe la charge utile pour en garantir l'intégrité, mais ne la chiffre pas. La charge utile est simplement encodée en Base64url, que n'importe qui peut décoder instantanément. N'incluez jamais d'informations sensibles (mots de passe, numéros de carte, pièces d'identité ou toute donnée que vous ne voudriez pas exposer) dans la charge utile d'un JWT. Si vous avez besoin de jetons chiffrés, utilisez plutôt JWE (chiffrement web JSON), qui est un standard distinct.
Quelle est la différence entre HS256 et RS256 ?
HS256 utilise HMAC-SHA256 : la même clé secrète sert à signer et à vérifier le jeton, ce qui en fait un schéma symétrique. C'est simple, mais cela signifie que chaque service qui vérifie les jetons doit connaître le secret. RS256 utilise RSA-SHA256 : l'émetteur signe avec une clé privée, et n'importe quel service peut vérifier avec la clé publique correspondante. RS256 est préféré dans les architectures multiservices car les clés publiques peuvent être partagées librement via un point d'accès JWKS, sans exposer le secret de signature.
Quelle erreur les développeurs commettent-ils souvent avec les JWT ?
L'erreur la plus fréquente est de considérer une signature valide comme une preuve d'autorisation sans vérifier aussi le claim exp : un jeton expiré avec une signature valide doit toujours être rejeté. Une deuxième erreur très proche est de stocker le JWT dans localStorage plutôt que dans un cookie HttpOnly, ce qui l'expose à tout JavaScript de la page (attaques XSS). Un troisième piège est de mettre trop de données dans la charge utile du JWT : les gros jetons ajoutent de la latence à chaque requête car ils doivent être transmis dans chaque en-tête HTTP.

À propos de Décodeur JWT

Les JWT apparaissent dans pratiquement tous les flux d'authentification modernes. Les jetons d'accès OAuth 2.0 sont presque universellement émis sous forme de JWT. Les jetons d'identité OpenID Connect sont des JWT qui transportent les claims d'identité de l'utilisateur authentifié. Les systèmes d'authentification unique font transiter des JWT entre fournisseurs d'identité et fournisseurs de services. Les fonctions serverless et les workers de périphérie valident les JWT localement sans consultation de base de données, permettant une authentification sans état et évolutive horizontalement. Les applications mobiles stockent les JWT comme jetons de porteur (bearer) et les incluent dans l'en-tête Authorization de chaque requête d'API. Comprendre ce qu'il y a dans un jeton (quelles autorisations il accorde, quand il expire et qui l'a émis) est une tâche quotidienne pour tout ingénieur backend ou sécurité.

Cet outil décode l'en-tête et la charge utile de n'importe quel JWT entièrement dans votre navigateur. Il décode en Base64url chaque segment, analyse le JSON et présente les claims dans un format lisible. Les horodatages numériques (iat, exp, nbf) sont automatiquement convertis en dates lisibles pour que vous voyiez instantanément si un jeton a expiré. La signature est affichée telle quelle, mais volontairement non vérifiée : la vérification nécessite le secret de l'émetteur (pour HMAC) ou sa clé publique (pour RSA/ECDSA), et vous ne devriez jamais coller l'un ou l'autre dans un outil en ligne non fiable. Comme le décodage se fait localement, même le jeton lui-même ne quitte pas votre appareil.

Quelques points de sécurité à garder à l'esprit : les JWT sont signés mais pas chiffrés par défaut ; la charge utile est simplement encodée en Base64url, ce qui signifie que quiconque intercepte le jeton peut lire ses claims. N'incluez jamais de données personnelles sensibles (mots de passe, numéros de carte) dans la charge utile d'un JWT. L'attaque alg: none est une vulnérabilité connue des bibliothèques JWT naïves qui acceptent les jetons non signés ; utilisez toujours une bibliothèque bien auditée qui valide explicitement l'algorithme. Vérifiez aussi le claim exp avant de faire confiance à un jeton : une signature valide ne signifie pas que le jeton est toujours actif.

L'essor du JSON Web Token

Les JSON Web Token ont été introduits par l'Internet Engineering Task Force (IETF) dans le cadre du groupe de travail JOSE (signature et chiffrement d'objets JSON), avec le RFC 7519 publié en mai 2015. L'objectif était de créer un format d'identifiant compact et autonome capable de remplacer les assertions SAML en XML, verbeuses et complexes, utilisées dans les systèmes d'authentification unique en entreprise. La conception délimitée par des points et encodée en Base64url a été délibérément choisie pour être adaptée aux URL et tenir confortablement dans un en-tête HTTP.

L'adoption a été fulgurante. En quelques années après la publication, presque tous les grands cadres d'authentification, d'Auth0 à Firebase Authentication en passant par AWS Cognito, avaient normalisé les JWT comme format de jeton. Le site jwt.io, lancé par Auth0 comme outil de débogage, est devenu l'un des utilitaires pour développeurs les plus visités d'internet. Cette popularité a aussi attiré l'attention : les chercheurs en sécurité ont catalogué une série de vulnérabilités d'implémentation (le bug 'alg: none', les attaques par confusion d'algorithme) qui affectaient les implémentations de bibliothèques naïves, déclenchant une vague d'améliorations dans les bibliothèques JWT de tous les langages de programmation.

Un choix de conception intéressant des JWT est que la charge utile est lisible par tous : la signature garantit l'intégrité, mais pas le secret. C'était intentionnel : les concepteurs voulaient que les jetons soient débogables sans clé, permettant à des outils comme les décodeurs JWT d'aider les développeurs à inspecter les jetons pendant le développement. Le compromis est que les développeurs doivent être disciplinés quant aux claims qu'ils incluent, une leçon apprise à leurs dépens par des équipes ayant accidentellement livré des JWT contenant des données sensibles d'utilisateurs.

Publicité
Publicité
Publicité