Aller au contenu
ecdsa.com
jwks-rsa (Node.js)JWKS et découverte des clés

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

Comment corriger l’erreur

  1. 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. 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

Parcourir toute la base de données des erreurs de signature