Français

Outils de développement · Décodeur JWT

Comment décoder une charge utile JWT à la main avec base64 et jq

· Comment ça marche

jwt ligne de commande flux de travail du développeur

Une charge utile JWT se déplaçant à travers les étapes de division de coque, de translation, de remplissage et JSON
Illustration vectorielle originale de ToolAcre

Sur une boîte sans tête, vous pouvez toujours lire un jeton avec cut, tr, base64 et jq. Cet article donne les commandes, explique la conversion base64url que chacune effectue et répertorie les pièges.

Lecture d'un jeton via SSH – lorsqu'un navigateur n'est pas une option

Un serveur sans interface graphique peut vous laisser avec une chaîne en forme de jeton et aucune interface utilisateur de navigateur. Le travail d'inspection requis est encore minime : isoler un segment, traduire l'orthographe base64url, restaurer le remplissage, décoder les octets et analyser JSON. Le danger est opérationnel plutôt que informatique, car l’historique du shell peut préserver un identifiant en direct.

Utilisez un jeton expiré ou synthétique autant que possible. Si la réponse à un incident nécessite l’examen d’une valeur réelle, suivez les contrôles de gestion des informations d’identification de votre organisation, empêchez-la d’entrer dans l’historique ou les journaux partagés et faites-la pivoter après exposition. Le décodage en ligne de commande reste uniquement une inspection ; il ne fournit aucune clé de vérification ni politique de confiance.

Fractionnement en points – couper ou awk pour isoler le segment de charge utile

Un JWT compact en forme de JWS comporte trois champs séparés par des points. La charge utile est la deuxième. Un shell peut le diviser avec un outil prenant en charge les délimiteurs, mais citer les variables afin que le shell ne développe pas les caractères ni ne divise les espaces. Supprimez une étiquette `Bearer ` avant de sélectionner des champs, car ce préfixe appartient à la syntaxe HTTP.

Comptez les champs plutôt que de prendre aveuglément le champ deux. ToolAcre rejette tout autre chose que trois parties et identifie séparément l'entrée cryptée en cinq parties. Un pipeline shell doit appliquer la même prudence structurelle ; recevoir un segment à partir d'une entrée mal formée peut produire un JSON plausible tout en dissimulant que le jeton d'origine a été tronqué.

Conversion de l'alphabet — tr pour transformer le trait d'union et le trait de soulignement en plus et en barre oblique

Les implémentations Base64 de ligne de commande standard s'attendent généralement à un signe plus et une barre oblique où un segment JWT peut contenir un trait d'union et un trait de soulignement. La traduction de `-` en `+` et de `_` en `/` mappe les symboles sécurisés pour les URL à leurs positions standard sans modifier les valeurs à six bits représentées.

Utilisez une commande de traduction dont l'analyse des options ne peut pas confondre un trait d'union principal avec un indicateur et conservez les données dans une variable entre guillemets ou une entrée standard. La conversion alphabétique est un travail de codage réversible. Il ne décrypte pas les réclamations et le succès n’établit pas que le jeton provient de l’émetteur désigné.

Restauration du remplissage : l'arithmétique qui ajoute le bon nombre de signes égal

Après traduction, calculez la longueur modulo quatre. Le reste zéro n'a pas besoin de signe égal, le reste deux en a besoin de deux et le reste trois en a besoin d'un. Le reste indique une troncature et doit arrêter le pipeline. L'ajout d'un remplissage arbitraire jusqu'à ce qu'un utilitaire cesse de se plaindre peut masquer les dommages plutôt que de les diagnostiquer.

ToolAcre utilise exactement cette règle de longueur dans `base64ToBytes` et rejette le reste impossible. Les utilitaires Shell varient selon qu'ils acceptent ou non le remplissage omis, donc la normalisation de l'entrée en premier rend le pipeline explicite et portable dans son concept, bien que les indicateurs de commande puissent toujours différer entre les systèmes d'exploitation.

Décodage et jolie impression - base64 -d transmis à jq

Transmettez la valeur complétée au décodeur Base64 de la plate-forme, puis à `jq`. La première commande récupère les octets ; la seconde nécessite que ces octets forment JSON. Une commande Base64 réussie suivie d'une erreur d'analyse jq signifie que l'encodage était structurellement décodable mais que son contenu n'était pas une charge utile JSON.

Cette distinction reflète les chemins d'erreur de ToolAcre. Il signale d'abord une URL base64 ou UTF-8 non valide, puis signale séparément JSON non valide, puis rejette les valeurs nulles, les tableaux et les primitives car un en-tête ou une charge utile JWT doit être un objet pour cet outil. Garder les étapes séparées rend un échec exploitable.

Exemple concret : le pipeline complet sur un exemple de jeton, avec la sortie à chaque étape

Pour un exemple synthétique, le segment de charge utile `eyJzdWIiOiJkZW1vIiwicm9sZSI6InJlYWRlciJ9` ne nécessite aucune traduction alphabétique ni remplissage. Le décodage donne `{"sub":"demo","role":"reader"}` et jq formate cet objet sur plusieurs lignes. Le rôle visible est simplement une chaîne fournie par le jeton.

Modifiez maintenant le JSON, encodez-le à nouveau et attachez un troisième segment. Le pipeline imprime toujours l'objet modifié. Cela prouve pourquoi une commande de décodage ne peut pas servir de contrôle de validité : les revendications légitimes et fabriquées traversent les mêmes transformations publiques à moins qu'un vérificateur distinct ne vérifie la signature.

Pièges : historique du shell capturant le jeton, implémentations base64 qui rejettent le remplissage manquant et jetons avec un "Bearer" en tête

Les échecs courants incluent la conservation du préfixe HTTP, la sélection du mauvais champ séparé par des points, la perte des caractères de fin lors de la copie et l'utilisation d'une implémentation Base64 qui nécessite un remplissage. Un autre écueil consiste à placer l'intégralité du jeton directement sur la ligne de commande, où les listes de processus ou l'historique peuvent le conserver.

Préférez les entrées standard et les variables éphémères sous des contrôles appropriés, et ne collez jamais de jeton de production dans le chat, les tickets ou les terminaux partagés pour plus de commodité. N'oubliez pas non plus que le troisième segment est un matériau de signature binaire plutôt que JSON, donc son envoi via jq devrait échouer et ne vous dit rien sur la validité de la signature.

À retenir : le même décodage, n'importe quel environnement – lorsque vous disposez d'un navigateur, le décodeur ToolAcre JWT le fait localement sans rien télécharger

Le pipeline shell et ToolAcre exécutent la même séquence de décodage uniquement dans différents environnements : diviser, normaliser, compléter, décoder UTF-8 et analyser JSON. Utilisez n’importe quel environnement que vous pouvez inspecter et contrôler, avec des données non sensibles par défaut.

Aucun des deux chemins ne vérifie l'authenticité ou n'autorise un appelant. Après avoir lu la forme de la charge utile, accédez au vérificateur de confiance du service et enregistrez les décisions cryptographiques et politiques. Une commande qui produit un joli JSON a terminé une tâche de formatage, pas un jugement de sécurité.