Décodez le payload JWT sans vérifier la signature
Ce décodeur JWT sépare un JSON Web Token en trois segments compacts et lit le JSON encodé en base64url dans l’en-tête et le payload.
Lancer gratuitement
Il renvoie ces deux parties sous forme d’objets structurés, afin que vous puissiez facilement examiner ou transmettre les claims, identifiants, horodatages, émetteurs, destinataires et métadonnées d’algorithme. La signature n’est volontairement pas vérifiée : les valeurs décodées indiquent ce que le token affirme, sans prouver qui l’a créé. Utilisez le résultat pour le débogage, le développement, la documentation et une inspection prudente, jamais comme preuve d’authenticité ou d’autorisation.
Comprenez ce que le décodage prouve ou ne prouve pas
Un JWT contient généralement un en-tête, un payload et une signature, reliés par des points. Les deux premiers segments sont du JSON encodé en base64url : leur contenu est adapté à un transport compact, mais il n’est ni chiffré ni caché. Cette capacité divise le token fourni, décode ces deux segments en UTF-8, analyse leur JSON et renvoie les objets d’en-tête et de payload obtenus. Elle n’utilise pas le troisième segment pour authentifier quoi que ce soit. Cette distinction est essentielle, car n’importe qui peut fabriquer une chaîne ressemblant à un token avec des claims arbitraires. La présence d’un sujet, d’un rôle, d’un émetteur, d’un destinataire ou d’une expiration dans le payload décodé ne démontre pas qu’un système fiable l’a émis. Servez-vous du décodage pour voir la structure d’un token, diagnostiquer les noms ou valeurs des claims, ou obtenir une représentation lisible pendant le développement. Lorsqu’une décision de sécurité dépend du token, utilisez une bibliothèque de vérification JWT appropriée avec une clé explicitement fiable et des contraintes d’algorithme, d’émetteur et de destinataire.
Fournissez un JWT compact et interprétez la réponse
Collez ou envoyez le JWT compact complet dans le champ token. Un token structurellement valide comporte exactement trois segments séparés par deux points, même si ce décodeur ne lit que les deux premiers. La réponse contient un objet header et un objet payload. Les champs d’en-tête courants comprennent typ, qui identifie souvent le type de média JWT, et alg, qui désigne l’algorithme de signature déclaré. Le payload contient souvent sub pour le sujet, iss pour l’émetteur, aud pour le destinataire, exp pour l’expiration et des claims propres à l’application. Aucun claim n’est exigé : les valeurs JSON présentes sont conservées. Les claims NumericDate tels que exp, nbf et iat restent des nombres au lieu d’être convertis en dates, sans présumer de la façon dont vous souhaitez les afficher ou les comparer. Si le token comporte un nombre incorrect de segments, du base64url mal formé, du UTF-8 ou du JSON invalide, ou une section décodée qui n’est pas un objet, la requête renvoie une erreur d’entrée invalide plutôt qu’un résultat partiel.
Utilisez les claims décodés en toute sécurité
Le décodage est particulièrement utile à la frontière entre systèmes. Une équipe API peut comparer les claims produits par un fournisseur d’identité aux noms attendus par une application. Le support peut examiner un token de test expurgé afin de repérer un destinataire ou un scope manquant. Une suite de tests peut décoder les tokens créés par une fixture locale et confirmer la présence des claims personnalisés requis avant de tester séparément la vérification cryptographique. Gardez toujours la limite de sécurité explicite : les données décodées sont des entrées non fiables. N’accordez pas d’accès, ne choisissez pas de tenant, n’acceptez pas d’identité et n’exposez pas de données privées uniquement parce qu’un claim décodé le demande. Évitez de coller de véritables tokens bearer dans des journaux, tickets, chats ou documents partagés, car un JWT peut être un identifiant actif malgré un payload apparemment inoffensif. Pour vos diagnostics, préférez des exemples synthétiques, expirés ou générés localement. Si une automatisation doit traiter de vrais tokens, transmettez-les uniquement par un canal correctement protégé, puis effectuez une vérification fondée sur une configuration fiable.
Cas d’usage
Déboguer les claims d’un fournisseur d’identité
Examinez la structure de l’en-tête et du payload pour comparer les noms, destinataires, scopes et identifiants émis avec la configuration de l’application.
Contrôler des tokens de test locaux
Décodez les tokens de fixture dans vos tests ou scripts et confirmez les claims personnalisés attendus avant de vérifier séparément la signature.
Expliquer la structure d’un token
Transformez un JWT compact en objets JSON lisibles pour la documentation, la formation ou le diagnostic avec des exemples synthétiques et expurgés.
Questions fréquentes
Cet outil vérifie-t-il la signature du JWT ?
Non. Il décode seulement l’en-tête et le payload. Considérez chaque champ comme non fiable jusqu’à la validation de la signature et des claims requis.
Combien cela coûte-t-il ?
Le tarif de l’API est de $0.002 par requête. La version navigateur peut exécuter localement la même logique de décodage déterministe.
Pourquoi le token doit-il avoir trois segments ?
La sérialisation compacte JWT comprend un en-tête, un payload et une signature séparés par des points. Toute autre structure est refusée.
Les horodatages d’expiration deviennent-ils des dates ?
Non. Les valeurs comme exp, nbf et iat sont renvoyées exactement comme dans le payload, afin que vous les interprétiez selon vos besoins.
Puis-je décoder un JWT non signé ?
Un token compact requiert toujours trois segments ; le troisième peut être vide pour un token non sécurisé. L’en-tête et le payload sont décodés sans conclusion de sécurité.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/web/jwt-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}'const res = await fetch("https://api.kit.forhosting.com/web/jwt-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/jwt-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/jwt-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/jwt-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.c2lnbmF0dXJl"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.jwt_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |