Comment générer une clé secrète JWT pour les algorithmes HMAC

Clés pour JWT

Les JSON Web Tokens (JWT) signés avec les algorithmes HMAC — HS256, HS384 ou HS512 — reposent sur une clé secrète partagée. Toute personne qui possède cette clé peut à la fois créer et vérifier des tokens. Générer une clé robuste est donc indispensable.

Prérequis pour une clé secrète sécurisée

Avant de générer une clé, voici ce que “sécurisée” signifie concrètement :

  • Longueur : au minimum 256 bits (32 octets) pour HS256, 384 bits (48 octets) pour HS384 et 512 bits (64 octets) pour HS512. Une clé trop courte est facilement cassée par force brute.
  • Aléatoire : la clé doit provenir d’un générateur de nombres aléatoires cryptographiquement sécurisé (CSPRNG), et non de Math.random() ou d’un timestamp.
  • Confidentialité : ne jamais coder la clé en dur dans le code source. Stockez-la dans des variables d’environnement ou un gestionnaire de secrets.

Générer avec OpenSSL

OpenSSL est la méthode la plus portable sur tout système UNIX.

Générer un secret de 256 bits (32 octets) encodé en base64 :

Terminal window
openssl rand -base64 32

Pour HS384 ou HS512, augmentez le nombre d’octets :

Terminal window
# HS384 — 48 octets
openssl rand -base64 48
# HS512 — 64 octets
openssl rand -base64 64

Pour un secret encodé en hexadécimal :

Terminal window
openssl rand -hex 32

Générer avec /dev/urandom (Linux / macOS)

/dev/urandom est un CSPRNG géré par le noyau — cryptographiquement sécurisé et disponible sans aucune dépendance.

Terminal window
# encodé en base64, 32 octets
dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64

Générer avec PowerShell (Windows)

PowerShell utilise System.Security.Cryptography.RandomNumberGenerator, qui s’appuie sur le CSPRNG du système d’exploitation (CNG sous Windows).

Terminal window
# 32 octets = 256 bits, adapté à HS256
[Convert]::ToBase64String(
[System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32)
)

Pour HS384 ou HS512, remplacez 32 par 48 ou 64.

Utiliser un générateur en ligne

Si vous n’avez pas de terminal à disposition, vous pouvez utiliser notre générateur de clé secrète JWT pour obtenir une clé cryptographiquement sécurisée directement dans votre navigateur. La clé est générée côté client — rien n’est envoyé à un serveur.

Bonnes pratiques

  • Ne committez jamais un secret dans Git. Utilisez des fichiers .env (exclus via .gitignore) ou un gestionnaire de secrets comme AWS Secrets Manager, HashiCorp Vault ou équivalent.
  • Renouvelez les secrets régulièrement. Lors d’une rotation, supportez temporairement l’ancienne et la nouvelle clé pour éviter d’invalider tous les tokens existants en même temps.
  • Choisissez l’algorithme adapté à votre cas. HMAC convient aux systèmes mono-service où le même service signe et vérifie les tokens. Pour des architectures distribuées où plusieurs services vérifient sans pouvoir émettre, préférez les algorithmes asymétriques comme RS256 ou ES256 — consultez notre guide sur les algorithmes de signature JWT.
  • Testez votre implémentation JWT. Une fois votre service opérationnel, utilisez VulnAPI pour vérifier que votre implémentation rejette correctement les tokens falsifiés et n’est pas vulnérable aux attaques JWT connues comme le contournement alg: none.