Encodeur JWT

Créez et signez des JWT en HS256, HS384 ou HS512 dans le navigateur. Éditez le JSON de l’en-tête et du payload ; ordre des claims et kid conservés.

Vos saisies et fichiers restent dans le navigateur

En-tête, charge utile et signature

Signature

Corrigez le JSON de l’en-tête et de la charge utile : le jeton signé s’affiche ici pendant la saisie.

Sur cette page

Construisez un JSON Web Token signé pour tester des API et des flux d’authentification : modifiez le JSON de l’en-tête et de la charge utile, choisissez HS256, HS384 ou HS512, saisissez un secret et copiez le jeton, mis à jour à chaque frappe.

Fonctionnalité détaillée

L’en-tête et la charge utile doivent chacun être un objet JSON ; un JSON invalide ou une valeur qui n’est pas un objet, comme un tableau, est signalé sous son champ et aucun jeton n’est produit. Le JSON est compacté (espaces supprimés) et encodé en base64url sans padding, en conservant l’ordre de vos claims et les champs d’en-tête supplémentaires comme kid ou cty. La valeur alg de l’en-tête est remplacée par l’algorithme choisi dans la liste, ou ajoutée en premier si elle manque.

La signature HMAC (SHA-256, SHA-384 ou SHA-512) est calculée par un module cryptographique Rust compilé en WebAssembly ; le secret est utilisé comme texte UTF-8. Seuls les algorithmes HMAC symétriques sont disponibles — les jetons RS256 ou ES256, qui exigent une clé privée, ne peuvent pas être créés ici. Un secret vide produit quand même un jeton signé avec une clé vide, utile seulement pour des essais.

Le secret et les claims restent dans la page et ne sont pas enregistrés. L’outil n’ajoute pas iat ni exp de lui-même : placez vous-même des valeurs NumericDate (temps Unix en secondes) dans la charge utile.

Exemples pratiques

Vecteur de test jwt.io : l’en-tête par défaut {"alg":"HS256","typ":"JWT"} et la charge utile {"sub":"1234567890","name":"John Doe","iat":1516239022} avec le secret your-256-bit-secret donnent un jeton se terminant par SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, exactement comme sur jwt.io.

Key ID et expiration : en-tête {"alg":"HS256","typ":"JWT","kid":"key-2026"}, charge utile {"sub":"42","role":"admin","exp":1767225600} et algorithme HS384 — l’en-tête encodé devient {"alg":"HS384","typ":"JWT","kid":"key-2026"} en gardant l’ordre des champs, et la signature fait 64 caractères.

Pas un objet : une charge utile [1,2] affiche « Doit être un objet JSON » sous le champ et le jeton est effacé.

Comment utiliser cet outil

  1. Modifiez l’en-tête

    Ajustez le JSON dans En-tête — ajoutez kid si votre vérificateur l’exige ; alg est fixé par la liste des algorithmes.

  2. Écrivez les claims

    Placez vos claims (sub, role, exp …) dans Charge utile sous forme d’objet JSON.

  3. Choisissez l’algorithme et le secret

    Sélectionnez HS256, HS384 ou HS512 dans Algorithme et saisissez le secret partagé dans Clé secrète.

  4. Copiez le jeton

    Le jeton dans Jeton encodé se met à jour à chaque modification ; cliquez sur Copier le jeton pour le copier.

Conseils et bonnes pratiques

  • Utilisez un secret aléatoire au moins aussi long que le hachage : 32 octets pour HS256, 48 pour HS384, 64 pour HS512.
  • exp, nbf et iat sont en secondes, pas en millisecondes : 1767225600, pas 1767225600000.
  • Chaque caractère du secret compte, y compris un espace ou un saut de ligne final.
  • La charge utile est seulement encodée en base64url, pas chiffrée — toute personne qui a le jeton peut la lire.
  • Vérifiez le résultat dans le Décodeur JWT avec le même secret.