Mensaje de error
IDX10511: Signature validation failed. Keys tried:
También se muestra como
- Bearer error="invalid_token", error_description="The signature is invalid"
El resto del mensaje enumera las claves probadas (ocultas como `[PII … is hidden]` salvo que `ShowPII` esté activado), los recuentos de claves, de dónde procede la clave encontrada y el `kid`.
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET) — SecurityTokenInvalidSignatureException
Qué significa
A diferencia de IDX10503, sí se encontró una clave con el `kid` del token («Matched key was in 'TokenValidationParameters'» o «…'Configuration'»), y aun así la firma no se verificó con ella. O bien dos claves distintas comparten un mismo ID de clave, o bien el token se modificó después de firmarse. ASP.NET Core responde con `error_description="The signature is invalid"`.
Por qué ocurre
Dos claves con el mismo kid
frecuenteLos ID de clave elegidos por nombre (`signing-key`, `default`, `rsa1`) colisionan cuando cada entorno o cada despliegue genera su propia clave. El validador elige la clave por `kid` y la firma falla.
Encabezado o carga útil modificados después de la firma
ocasionalUna nueva codificación en un gateway, un recorte de la cadena o código de pruebas que edita claims de un token existente.
Bytes distintos para el mismo secreto HMAC
ocasionalCon HS256 y un `kid`, una parte puede construir la clave a partir del texto UTF-8 y la otra a partir de los bytes decodificados de base64. El ID de clave coincide; la clave, no.
Cómo solucionarlo
- 1.
Usar ID de clave basados en la huella digital
Un `kid` calculado a partir del material de la clave (RFC 7638) solo puede colisionar si las claves son 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.
Acordar los bytes del secreto
Guarda el secreto compartido codificado en base64 y decodifícalo del mismo modo en ambas partes.
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);
Errores 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)