Décodeur de JWT
Un JWT est un jeton d’authentification en trois parties séparées par des points : en-tête, charge utile et signature. Cet outil décode les deux premières et affiche leur contenu en clair — émetteur, date d’expiration, identifiant, rôles — pour comprendre ce qu’un token transporte. Rien n’est vérifié ni envoyé : tout se lit dans votre navigateur.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Lire un token sans le déchiffrer
Contrairement à une idée répandue, un JWT n’est pas chiffré : sa charge utile est seulement encodée en Base64URL. N’importe qui peut donc en lire le contenu — c’est le rôle de cet outil. Collez le token, et ses claims apparaissent en JSON lisible. Conséquence pratique à retenir : ne placez jamais de donnée secrète dans un JWT, puisque tout porteur du jeton peut la lire aussi facilement que vous.
Comprendre les claims standards
Certains champs reviennent partout : « iss » pour l’émetteur, « sub » pour le sujet, « exp » pour l’expiration, « iat » pour la date d’émission. L’outil traduit ces horodatages Unix en dates lisibles, ce qui répond à la question la plus fréquente : ce token est-il encore valide ou déjà expiré ? Les claims personnalisés, comme les rôles ou le nom, s’affichent tels quels, sans transformation. Un simple regard suffit alors à situer le jeton dans le temps et à savoir qui l’a émis.
Diagnostiquer une authentification
Une requête est refusée avec une erreur 401 ? Décoder le token révèle souvent la cause en quelques secondes : une expiration dépassée, un émetteur inattendu, un public (« aud ») qui ne correspond pas à votre service. Plutôt que de deviner, vous lisez ce que le jeton contient réellement et vous savez aussitôt si le problème vient du client ou du serveur. Le diagnostic tient en une seule lecture, sans le moindre outil externe.
Décoder n’est pas vérifier
Cet outil lit le contenu, mais ne contrôle pas la signature : il ne dit pas si le token est authentique, seulement ce qu’il prétend. La vérification de signature, qui exige la clé, se fait côté serveur. Ici, l’objectif est l’inspection : comprendre, déboguer, apprendre — jamais valider une session en production, ce qui relève d’un autre traitement. Gardez cette limite en tête : lisible ne veut pas dire authentifié.
Le token reste chez vous
Un JWT en cours de validité vaut un mot de passe : quiconque le détient peut se faire passer pour vous. C’est pourquoi le décodage a lieu entièrement dans votre navigateur, sans aucun envoi. Pour intégrer le décodage à un flux automatisé via l’API, le tarif est de $0.002 la requête, en dollars US ; l’inspection manuelle reste gratuite et illimitée. Vous examinez le jeton en toute sécurité, sans jamais l’exposer à un tiers.
Cas d’usage
Vérifier l’expiration d’une session
Face à des déconnexions inexpliquées, Sophie Nguyen décode le token et constate que le champ « exp » tombe bien plus tôt que prévu.
Comprendre une erreur 401
Nadia Benali colle le JWT rejeté par l’API : l’émetteur ne correspond pas à celui attendu, la cause du refus est trouvée.
Inspecter les rôles d’un utilisateur
Le Studio Lumen SAS décode le token d’un compte de test pour confirmer que les rôles administrateur y figurent bien.
Questions fréquentes
Un JWT est-il chiffré ?
Non. Sa charge utile est simplement encodée en Base64URL, donc lisible par quiconque possède le token. La signature garantit l’intégrité, pas la confidentialité. Ne stockez jamais de secret dans un JWT.
Cet outil vérifie-t-il la signature ?
Non, il décode et affiche le contenu, sans contrôler l’authenticité. La vérification de signature exige la clé et se fait côté serveur. Ici, l’objet est l’inspection : comprendre ce que le token transporte.
Comment savoir si un token est expiré ?
L’outil convertit le champ « exp » en date lisible. Si cette date est passée, le token est expiré et sera refusé par un serveur correctement configuré, même si son contenu paraît par ailleurs valide.
Mon token est-il envoyé sur vos serveurs ?
Non. Le décodage se fait dans votre navigateur ; le jeton n’est ni transmis ni enregistré. C’est essentiel, car un JWT valide permet d’usurper une session.
Que signifient iss, sub et aud ?
« iss » désigne l’émetteur du token, « sub » le sujet — souvent l’identifiant de l’utilisateur — et « aud » le public visé, c’est-à-dire le service censé l’accepter. Un « aud » incohérent explique bien des refus.
Est-ce payant ?
Non pour l’usage manuel dans le navigateur, gratuit et sans limite. Pour décoder des tokens via l’API dans un flux automatisé, le tarif est de $0.002 par requête, en dollars US.
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/dev/jwt-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/dev/jwt-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/jwt-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/jwt-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/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
{
"items": [
"valor-1",
"valor-2"
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.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.
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. |