Pular para o conteúdo
ecdsa.com
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET).NET

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

Como corrigir

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

Ver toda a base de erros de assinatura