Mensagem de erro
Unable to find a signing key that matches '2026-10-rotated'
Também aparece 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
O valor entre aspas é o `kid` do token (`'undefined'` se o cabeçalho não tiver um). Via `jwt.verify()` com callback, o texto ganha o prefixo “error in secret or public key callback: ”. Um token sem `kid` diante de um conjunto com várias chaves falha com “No KID specified and JWKS endpoint returned more than 1 key”.
jwks-rsa (Node.js) — SigningKeyNotFoundError, often wrapped by jsonwebtoken or express-jwt
O que significa
O jwks-rsa baixou o conjunto de chaves e nenhuma das chaves de assinatura utilizáveis tem o `kid` do cabeçalho do token (o valor entre aspas). O token pode ser perfeitamente válido — o verificador simplesmente não tem a chave que o assinou. Quando o jwks-rsa é usado pelo callback de chave do jsonwebtoken, a mensagem ganha o prefixo “error in secret or public key callback:”.
Por que acontece
Rotação de chaves e um conjunto de chaves em cache
comumO provedor começou a assinar com uma chave nova. O jwks-rsa busca o conjunto de novo quando aparece um `kid` desconhecido, mas só se o cache e o limite de taxa permitirem; um cliente criado com um cache muito longo ou uma cópia manual das chaves continua falhando até a reinicialização.
A URL do JWKS pertence a outro locatário ou ambiente
comumLocatários do Auth0, grupos de usuários do Cognito, locatários do Entra ID e realms do Keycloak têm, cada um, seu próprio conjunto de chaves. Um `jwksUri` de homologação em produção traz chaves com valores de `kid` de aparência válida, mas diferentes.
A chave correspondente foi descartada pelo filtro
ocasionalO jwks-rsa só considera chaves com `use` ausente ou `"sig"` e `kty` RSA, EC ou OKP que ele consiga importar como chaves públicas. Uma chave publicada com `use: "enc"`, ou uma JWK malformada, é ignorada silenciosamente mesmo que o `kid` dela corresponda.
O token foi emitido por outro provedor
ocasionalTokens de outro provedor de identidade (ou um token que você gerou localmente para testes) citam chaves que este provedor nunca publicou. Confira o `iss` no payload antes de depurar as chaves.
Como corrigir
- 1.
Listar os valores de kid publicados
Decodifique o cabeçalho do token e compare o `kid` dele com as chaves do seu `jwksUri`. Se o `kid` estiver na lista, mas o erro continuar, a chave está sendo descartada pelo filtro — confira o `use` e o `kty` dela.
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.
Criar um único cliente com cache e limite de taxa
Um cliente criado no nível do módulo, com cache, busca o conjunto de novo quando surge um `kid` novo e protege o provedor de uma enxurrada de requisições quando atacantes enviam valores de `kid` aleatórios.
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, });
Erros 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