Message d’erreur
Unable to find a signing key that matches '2026-10-rotated'
Également affiché sous la forme
- error in secret or public key callback: Unable to find a signing key that matches '2026-10-rotated'
- SigningKeyNotFoundError: Unable to find a signing key that matches
- No KID specified and JWKS endpoint returned more than 1 key
La valeur entre guillemets est le `kid` du jeton (`'undefined'` si l’en-tête n’en a pas). Via `jwt.verify()` avec un callback, le texte est précédé de « error in secret or public key callback: ». Un jeton sans `kid` confronté à un jeu de plusieurs clés échoue avec « No KID specified and JWKS endpoint returned more than 1 key ».
jwks-rsa (Node.js) — SigningKeyNotFoundError, often wrapped by jsonwebtoken or express-jwt
Ce que cela signifie
jwks-rsa a téléchargé le jeu de clés, et aucune de ses clés de signature utilisables ne porte le `kid` de l’en-tête du jeton (la valeur entre guillemets). Le jeton peut être parfaitement valide : le vérificateur ne dispose simplement pas de la clé qui l’a signé. Lorsque jwks-rsa est utilisé via le callback de clé de jsonwebtoken, le message est précédé de « error in secret or public key callback: ».
Pourquoi cela se produit
Rotation des clés et jeu de clés en cache
fréquenteLe fournisseur a commencé à signer avec une nouvelle clé. jwks-rsa récupère de nouveau le jeu face à un `kid` inconnu, mais seulement si le cache et la limitation de débit le permettent ; un client créé avec une durée de cache très longue, ou une copie manuelle des clés, continue d’échouer jusqu’au redémarrage.
L’URL du JWKS appartient à un autre locataire ou à un autre environnement
fréquenteLes locataires Auth0, les groupes d’utilisateurs Cognito, les locataires Entra ID et les realms Keycloak ont chacun leur propre jeu de clés. Un `jwksUri` de préproduction utilisé en production renvoie des clés dont les valeurs `kid` paraissent valides, mais diffèrent.
La clé correspondante a été écartée par le filtrage
occasionnellejwks-rsa ne retient que les clés dont `use` est absent ou vaut `"sig"`, dont `kty` est RSA, EC ou OKP, et qu’il peut importer comme clés publiques. Une clé publiée avec `use: "enc"`, ou une JWK malformée, est ignorée sans avertissement même si son `kid` correspond.
Le jeton a été émis par un autre fournisseur
occasionnelleLes jetons d’un autre fournisseur d’identité (ou un jeton que vous avez créé localement pour des tests) désignent des clés que ce fournisseur n’a jamais publiées. Vérifiez `iss` dans la charge utile avant de déboguer les clés.
Comment corriger l’erreur
- 1.
Lister les valeurs kid publiées
Décodez l’en-tête du jeton et comparez son `kid` avec les clés servies par votre `jwksUri`. Si le `kid` y figure mais que l’erreur persiste, la clé est écartée par le filtrage : examinez son `use` et son `kty`.
bash # kids the provider publishes (jwks-rsa ignores keys with use "enc" and non RSA/EC/OKP keys) curl -s https://tenant.example.com/.well-known/jwks.json | jq '.keys[] | {kid, kty, use, alg}' - 2.
Créer un seul client avec cache et limitation de débit
Un client créé au niveau du module, avec cache, récupère de nouveau le jeu quand un nouveau `kid` apparaît et protège le fournisseur d’un afflux de requêtes lorsque des attaquants envoient des valeurs `kid` aléatoires.
js import jwksRsa from "jwks-rsa"; // One client per process; unknown kids trigger a refetch, bounded by the rate limit. export const jwksClient = jwksRsa({ jwksUri: "https://tenant.example.com/.well-known/jwks.json", cache: true, cacheMaxAge: 10 * 60 * 1000, rateLimit: true, jwksRequestsPerMinute: 10, });
Erreurs associées
no applicable key found in the JSON Web Key Setjose (JavaScript)Unable to find a signing key that matches: "2026-10"PyJWT (Python)IDX10503: Signature validation failed. The token's kid is: '2026-10', but did n…Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET)Jwks doesn't have key to match kid or alg from JwtEnvoy / Istio