Mensagem de erro
IDX10511: Signature validation failed. Keys tried:
Também aparece como
- Bearer error="invalid_token", error_description="The signature is invalid"
O restante da mensagem lista as chaves testadas (ocultas como `[PII … is hidden]`, a menos que `ShowPII` esteja ativado), as contagens de chaves, de onde veio a chave correspondente e o `kid`.
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET) — SecurityTokenInvalidSignatureException
O que significa
Ao contrário do IDX10503, uma chave com o `kid` do token foi encontrada (“Matched key was in 'TokenValidationParameters'” ou “…'Configuration'”) — e mesmo assim a assinatura não passou na verificação com ela. Ou duas chaves diferentes compartilham o mesmo ID de chave, ou o token foi alterado depois de assinado. O ASP.NET Core responde com `error_description="The signature is invalid"`.
Por que acontece
Duas chaves com o mesmo kid
comumIDs de chave escolhidos por nome (`signing-key`, `default`, `rsa1`) colidem quando cada ambiente ou cada implantação gera a própria chave. O validador escolhe a chave pelo `kid`, e a assinatura falha.
Cabeçalho ou payload alterado depois da assinatura
ocasionalNova codificação feita por um gateway, corte de caracteres ou código de teste que edita claims de um token existente.
Bytes diferentes para o mesmo segredo HMAC
ocasionalCom HS256 e um `kid`, um lado pode montar a chave a partir de texto UTF-8 e o outro a partir de bytes decodificados de base64. O ID da chave corresponde; a chave, não.
Como corrigir
- 1.
Usar IDs de chave baseados na impressão digital
Um `kid` calculado a partir do material da chave (RFC 7638) só pode colidir se as chaves forem idênticas.
csharp // Derive kid from the key itself (RFC 7638 thumbprint) so different keys never share an ID. var jwk = JsonWebKeyConverter.ConvertFromECDsaSecurityKey(new ECDsaSecurityKey(ecdsa)); var key = new ECDsaSecurityKey(ecdsa) { KeyId = Base64UrlEncoder.Encode(jwk.ComputeJwkThumbprint()) }; - 2.
Combinar os bytes do segredo
Armazene o segredo compartilhado codificado em base64 e decodifique-o da mesma forma nos dois lados.
csharp // HS256: issuer and API must build the key from the same bytes. var secret = Convert.FromBase64String(builder.Configuration["Jwt:SecretBase64"]!); // >= 32 bytes var signingKey = new SymmetricSecurityKey(secret);
Erros relacionados
IDX10503: Signature validation failed. The token's kid is: '2026-10', but did n…Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET)Signed JWT rejected: Invalid signatureNimbus JOSE + JWT (Java)failed to verify signature: failed to verify id token signaturecoreos/go-oidc (Go)