Saltar al contenido
ecdsa.com
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET).NET

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

Cómo solucionarlo

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

Explorar toda la base de datos de errores de firma