Mensaje de error
Unable to find a signing key that matches '2026-10-rotated'
También se muestra como
- 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
El valor entre comillas es el `kid` del token (`'undefined'` si el encabezado no lo tiene). A través de `jwt.verify()` con una devolución de llamada, el texto lleva delante «error in secret or public key callback: ». Un token sin `kid` frente a un conjunto con varias claves falla con «No KID specified and JWKS endpoint returned more than 1 key».
jwks-rsa (Node.js) — SigningKeyNotFoundError, often wrapped by jsonwebtoken or express-jwt
Qué significa
jwks-rsa descargó el conjunto de claves y ninguna de sus claves de firma utilizables tiene el `kid` del encabezado del token (el valor entre comillas). El token puede ser perfectamente válido: simplemente, el verificador no tiene la clave con la que se firmó. Cuando jwks-rsa se usa a través de la devolución de llamada de clave de jsonwebtoken, el mensaje lleva delante el prefijo «error in secret or public key callback:».
Por qué ocurre
Rotación de claves y un conjunto de claves en caché
frecuenteEl proveedor empezó a firmar con una clave nueva. jwks-rsa vuelve a descargar el conjunto ante un `kid` desconocido, pero solo si la caché y el límite de frecuencia lo permiten; un cliente creado con una caché muy larga o con una copia manual de las claves sigue fallando hasta que se reinicia.
La URL del JWKS pertenece a otro inquilino o entorno
frecuenteLos inquilinos de Auth0, los grupos de usuarios de Cognito, los inquilinos de Entra ID y los realms de Keycloak tienen cada uno su propio conjunto de claves. Un `jwksUri` de preproducción en producción devuelve claves con valores de `kid` de aspecto válido, pero distintos.
La clave coincidente se descartó en el filtrado
ocasionaljwks-rsa solo tiene en cuenta las claves sin `use` o con `"sig"`, con `kty` RSA, EC u OKP y que puede importar como claves públicas. Una clave publicada con `use: "enc"`, o una JWK mal formada, se omite en silencio aunque su `kid` coincida.
El token lo emitió otro proveedor
ocasionalLos tokens de otro proveedor de identidad (o un token generado localmente para pruebas) hacen referencia a claves que este proveedor nunca publicó. Comprueba `iss` en la carga útil antes de depurar las claves.
Cómo solucionarlo
- 1.
Enumerar los valores kid publicados
Decodifica el encabezado del token y compara su `kid` con las claves de tu `jwksUri`. Si el `kid` figura ahí pero el error persiste, la clave se está descartando en el filtrado: revisa su `use` y su `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.
Crear un único cliente con caché y límite de frecuencia
Un cliente a nivel de módulo con caché vuelve a descargar el conjunto cuando aparece un `kid` nuevo y protege al proveedor de una avalancha de solicitudes cuando los atacantes envían valores de `kid` aleatorios.
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, });
Errores relacionados
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