Structure et composition d'un JSON Web Token (JWT)
Un JSON Web Token (JWT) est un standard ouvert (RFC 7519) utilisé pour transférer des informations de manière compacte et autonome entre différentes parties. Un jeton se compose de trois parties distinctes, séparées par des points (.). Ces trois sections sont l'en-tête (header), la charge utile (payload) et la signature.
Chaque section remplit un rôle précis:
- L'en-tête (header): Contient les métadonnées du jeton, principalement le type de jeton et l'algorithme de chiffrement ou de hachage utilisé.
- La charge utile (payload): Contient les revendications (claims), qui sont les données utilisateur ou applicatives transportées par le jeton.
- La signature: Permet de valider l'intégrité du jeton et de s'assurer qu'il n'a pas été altéré en cours de route.
Le format compact du JWT permet son passage facile dans les en-têtes HTTP ou au sein des paramètres d'URL.
Le rôle de l'en-tête et de la charge utile
L'en-tête d'un JWT est un objet JSON qui spécifie comment le jeton doit être traité. On y retrouve généralement deux clés standardisées:
alg: L'algorithme de signature, comme HS256 ou RS256.typ: Le type de jeton, qui est habituellement « JWT ».
La charge utile contient les revendications, qui se divisent en trois catégories: les revendications enregistrées (standardisées), publiques et privées. Parmi les revendications enregistrées les plus courantes, on trouve:
iat(Issued At): Le moment où le jeton a été créé, exprimé sous forme de timestamp Unix.exp(Expiration Time): Le moment précis après lequel le jeton ne doit plus être accepté, également sous forme de timestamp Unix.sub(Subject): L'identifiant unique de l'entité concernée par le jeton.
Encodage Base64URL et format JSON
Contrairement à une idée reçue, les données d'un JWT ne sont pas chiffrées par défaut, mais simplement encodées. L'en-tête et la charge utile sont d'abord rédigés en format JSON, puis convertis en chaînes de caractères à l'aide de l'encodage Base64URL.
L'encodage Base64URL est une variante du Base64 classique qui remplace les caractères + et / par - et _ respectivement, et omet le caractère de remplissage =. Cette modification rend la chaîne de caractères sécuritaire pour une utilisation dans les URL sans nécessiter d'encodage supplémentaire. Si l'encodage Base64URL d'une section est corrompu ou si le JSON décodé comporte des erreurs de syntaxe, le jeton devient illisible.
Fonctionnement du Décodeur JWT
Cet outil analyse la structure de votre jeton pour en extraire et afficher instantanément les informations lisibles. Lorsque vous collez un jeton dans le champ de saisie, l'outil effectue les validations et traitements suivants:
- Validation de la structure: L'outil vérifie que la saisie comporte bien trois parties séparées par des points. Si ce n'est pas le cas, le message d'erreur « Ce n’est pas un JWT valide — trois parties séparées par des points sont attendues. » s'affiche.
- Limite de longueur: Si la chaîne saisie dépasse les limites normales d'un jeton, l'outil affiche « C’est trop long pour être un véritable JWT. ».
- Décodage de l'en-tête: L'outil décode la première partie. En cas d'échec de l'encodage, le message « Impossible de décoder l'en-tête — Base64URL invalide. » apparaît. Si le résultat n'est pas un JSON valide, l'outil affiche « L'en-tête n’est pas un JSON valide. ».
- Décodage de la charge utile: La deuxième partie est décodée de la même manière. Les erreurs associées sont « Impossible de décoder la charge utile — Base64URL invalide. » et « La charge utile n’est pas un JSON valide. ».
- Extraction des métadonnées: L'outil extrait et affiche le nombre de caractères sous l'étiquette « Caractères », l'algorithme, le type, la date d'émission (« Émis le ») et la date d'expiration (« Expire »).
- Évaluation de l'état: Selon la valeur de la revendication
exp, l'outil affiche un badge d'état: « Valide », « Expiré », « Pas encore valide » ou « Sans expiration » (si aucune revendicationexpn'est présente).
En cas d'erreur de format ou de décodage, les zones d'affichage des données décodées sont masquées. Lorsque le champ est vide, l'outil affiche l'état « Prêt. Collez un JWT pour le décoder. ». Si vous cliquez sur le bouton « Effacer », le champ se vide et le focus y est automatiquement retourné.
Différence entre décodage et vérification de signature
Il est crucial de distinguer le simple décodage d'un JWT de sa vérification.
Le décodage consiste uniquement à traduire les chaînes Base64URL en texte JSON lisible. Cette opération ne nécessite aucune clé secrète ni certificat. N'importe qui possédant le jeton peut en lire le contenu.
La vérification, quant à elle, consiste à s'assurer que le jeton a été signé par une entité de confiance et qu'il n'a pas été modifié. Pour ce faire, il faut appliquer l'algorithme spécifié dans l'en-tête sur l'en-tête et la charge utile, puis comparer le résultat avec la signature du jeton à l'aide d'une clé secrète partagée (pour les algorithmes symétriques comme HMAC) ou d'une clé publique (pour les algorithmes asymétriques comme RSA).
Ce décodeur ne vérifie pas la signature du jeton et ne vous demandera jamais de clé secrète ou publique. Par conséquent, l'état de validité affiché par l'outil se base uniquement sur l'analyse de la revendication temporelle exp.
Confidentialité des données
Le traitement de votre jeton s'effectue localement, directement dans votre navigateur Web. Aucune donnée saisie ou décodée n'est téléversée vers BroBroGo. Vos jetons et les informations applicatives qu'ils contiennent restent confinés à votre machine de travail.
FAQ
Est-il sécuritaire de coller mon JWT ici?
Oui. Le décodage s'effectue entièrement dans votre navigateur — votre jeton n’est jamais envoyé à BroBroGo.
Cet outil vérifie-t-il la signature?
Non. L'outil décode uniquement l'en-tête (header) et la charge utile (payload) pour lecture. La vérification d'une signature requiert la clé secrète ou publique, ce que cet outil ne demande jamais.
Comment savoir si mon jeton a expiré?
Le décodeur lit le champ exp et affiche un indicateur d'état — valide, expiré, pas encore valide, ou sans expiration — à côté du jeton décodé.
Qui a besoin de cet outil?
Cet outil est conçu pour les développeurs qui déboguent des intégrations de jetons, les ingénieurs de support technique qui analysent des sessions d'utilisateurs, ainsi que les testeurs de sécurité qui examinent la structure et les revendications des jetons d'authentification.