Générateur de JWT
Cet outil compose un JWT signé à partir des claims que vous saisissez : sujet, émetteur, rôles, date d’expiration. Vous choisissez l’algorithme — HS256 avec un secret partagé, ou RS256 avec une clé privée — et récupérez un token prêt à l’emploi pour tester une authentification. La signature se calcule sur votre appareil.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Composer un token de test
Pour développer ou déboguer, on a souvent besoin d’un JWT sur mesure : un utilisateur fictif doté de certains rôles, avec une expiration précise. Renseignez les claims voulus, réglez la durée de validité, et l’outil assemble en-tête, charge utile et signature. Vous obtenez un token que votre application acceptera, le temps de vérifier un parcours d’authentification sans dépendre du vrai fournisseur d’identité.
HS256 ou RS256 : deux modèles de clé
HS256 signe avec un secret unique, partagé entre celui qui émet et celui qui vérifie : simple, adapté à un service qui contrôle ses propres tokens. RS256 utilise une paire de clés : la privée signe, la publique vérifie, ce qui permet de distribuer la vérification sans jamais exposer le secret de signature. Le choix dépend de votre architecture ; l’outil gère les deux sans complication.
Un usage de développement, pas de production
Générer des tokens ici sert à tester et à comprendre, non à émettre des jetons de production, dont la clé doit rester sur un serveur maîtrisé. La signature s’effectue dans votre navigateur : votre secret n’est pas transmis à nos serveurs. Pour intégrer la signature à un flux automatisé via l’API, comptez $0.002 la requête, en dollars US ; l’usage manuel demeure gratuit.
Cas d’usage
Tester un parcours protégé
Julien Lefèvre forge un JWT avec le rôle « admin » et une expiration courte pour vérifier qu’une page réservée réagit correctement.
Reproduire un token d’un partenaire
Pour intégrer une API tierce, Nadia Benali recrée un token aux claims attendus et valide son intégration avant de brancher le vrai fournisseur.
Vérifier la gestion de l’expiration
Le Studio Lumen SAS génère un token déjà expiré pour s’assurer que l’application le refuse bien comme prévu.
Questions fréquentes
Quelle différence entre HS256 et RS256 ?
HS256 signe avec un secret partagé, connu de l’émetteur et du vérificateur. RS256 emploie une paire de clés : la privée signe, la publique vérifie, sans divulguer le secret. RS256 convient quand plusieurs services doivent vérifier sans pouvoir signer.
Ces tokens conviennent-ils à la production ?
Non. Ils servent au test et à l’apprentissage. En production, la clé de signature doit rester sur un serveur maîtrisé, jamais dans un navigateur. Utilisez l’outil pour déboguer, pas pour émettre de vrais jetons de session.
Ma clé de signature est-elle conservée ?
Non. Le secret ou la clé privée reste dans votre navigateur, le temps du calcul, sans être transmis ni enregistré. Rien ne subsiste une fois l’onglet fermé.
Puis-je définir mes propres claims ?
Oui. Vous ajoutez les champs voulus — sujet, émetteur, rôles, public, expiration — et l’outil les intègre à la charge utile avant de signer le token.
Y a-t-il un coût ?
Non dans le navigateur : c’est gratuit et sans limite. Pour signer des tokens via l’API dans une chaîne automatisée, 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-sign \
-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-sign", {
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-sign",
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-sign", 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-sign", 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_sign",
"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. |