Message d’erreur
no applicable key found in the JSON Web Key Set
jose (JavaScript) — JWKSNoMatchingKey, code ERR_JWKS_NO_MATCHING_KEY
Ce que cela signifie
jose a parcouru le jeu de clés (JSON Web Key Set) que vous lui avez fourni et n’y a trouvé aucune clé autorisée à vérifier ce jeton. Une clé n’est retenue que si toutes ces conditions sont réunies : son `kid` est égal au `kid` de l’en-tête du jeton (lorsque le jeton en a un), son `kty` correspond à l’`alg` du jeton, son `alg` (s’il est présent) est égal à l’`alg` du jeton, son `crv` correspond (P-256 pour ES256), `use` est absent ou vaut `"sig"`, et `key_ops` (s’il est présent) inclut `"verify"`. Aucune opération cryptographique n’a été exécutée : l’échec se situe dans la sélection de la clé.
Pourquoi cela se produit
L’émetteur a effectué une rotation de sa clé de signature
fréquenteLes nouveaux jetons portent un nouveau `kid` que le jeu de clés en cache ou codé en dur ne contient pas encore. C’est la cause la plus fréquente, et elle apparaît généralement à la minute exacte d’une rotation : les services redémarrés ensuite fonctionnent, les plus anciens échouent.
Le jeu de clés appartient à un autre émetteur ou à un autre environnement
fréquenteUne URL de JWKS de préproduction en production, le JWKS d’un autre locataire ou un jeu de clés copié depuis une documentation. Chaque `kid` semble plausible, aucun ne correspond.
Les métadonnées de la clé contredisent le jeton
occasionnelleLa JWK porte `alg: "RS256"` alors que le jeton est en ES256, ou la clé EC est sur P-384 alors que le jeton utilise ES256 (qui exige P-256). jose ignore ces clés même lorsque le `kid` correspond, car l’utilisation d’une clé pour un autre algorithme est précisément ce que les métadonnées JWK servent à empêcher.
La clé est marquée pour le chiffrement
occasionnelleUne clé publiée avec `use: "enc"` ou avec des `key_ops` qui ne contiennent pas `"verify"` n’est pas une clé de vérification de signature. Certains fournisseurs publient les deux types dans un même jeu ; seules les clés `sig` peuvent vérifier des jetons.
Une copie locale du JWKS n’a jamais été actualisée
occasionnelle`createLocalJWKSet` utilise les clés que vous lui passez, pour toujours. Si le jeu provient d’un fichier ou d’une variable d’environnement au moment du déploiement, il devient obsolète sans bruit dès la rotation suivante.
Comment corriger l’erreur
- 1.
Comparer le kid du jeton avec les clés publiées
Décodez l’en-tête protégé et listez les clés publiées avec leurs `kid`, `alg`, `kty`, `crv` et `use`. Si le `kid` est absent du jeu, il s’agit d’une rotation ou du mauvais jeu de clés ; s’il est présent, examinez les champs de métadonnées.
bash # kid and alg the token asks for python3 -c 'import base64,json,sys; h=sys.argv[1].split(".")[0]; print(json.loads(base64.urlsafe_b64decode(h + "=" * (-len(h) % 4))))' "$TOKEN" # kid, alg, kty, crv, use of every key the issuer publishes curl -s https://issuer.example.com/.well-known/jwks.json | jq '.keys[] | {kid, alg, kty, crv, use}' - 2.
Récupérer le JWKS de l’émetteur au lieu d’épingler des clés
`createRemoteJWKSet` met les clés en cache et récupère de nouveau le jeu lorsqu’un jeton désigne un `kid` qu’il n’a pas encore vu : les rotations sont ainsi prises en compte automatiquement, sans accepter de clés arbitraires.
js import { createRemoteJWKSet, jwtVerify } from "jose"; // Fetches the JWKS, caches it, and refetches when a token names an unknown kid // (at most once per cooldownDuration, 30 s by default). const jwks = createRemoteJWKSet(new URL("https://issuer.example.com/.well-known/jwks.json")); const { payload } = await jwtVerify(token, jwks, { algorithms: ["ES256"], issuer: "https://issuer.example.com", }); - 3.
Publier des clés aux métadonnées cohérentes
Si vous gérez l’émetteur, assurez-vous que chaque clé de signature possède un `kid` unique, `use: "sig"`, ainsi qu’un `alg` et un `crv` qui correspondent aux jetons qu’elle signe. Publiez la nouvelle clé avant de commencer à signer avec elle.
json { "keys": [ { "kty": "EC", "crv": "P-256", "kid": "2026-10", "use": "sig", "alg": "ES256", "x": "…", "y": "…" } ] }
Erreurs associées
multiple matching keys found in the JSON Web Key Setjose (JavaScript)Unable to find a signing key that matches '2026-10-rotated'jwks-rsa (Node.js)IDX10503: Signature validation failed. The token's kid is: '2026-10', but did n…Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET)signature verification failedjose (JavaScript)