Comment générer une clé secrète JWT pour les algorithmes HMAC
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 :
openssl rand -base64 32Pour HS384 ou HS512, augmentez le nombre d’octets :
# HS384 — 48 octetsopenssl rand -base64 48
# HS512 — 64 octetsopenssl rand -base64 64Pour un secret encodé en hexadécimal :
openssl rand -hex 32Gé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.
# encodé en base64, 32 octetsdd if=/dev/urandom bs=32 count=1 2>/dev/null | base64Gé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).
# 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.