Перейти к содержимому
ecdsa.com
Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET).NET

Сообщение об ошибке

IDX10511: Signature validation failed. Keys tried:

Также выводится как

  • Bearer error="invalid_token", error_description="The signature is invalid"

Остальная часть сообщения перечисляет опробованные ключи (они скрыты как `[PII … is hidden]`, если не включён `ShowPII`), количество ключей, откуда взят найденный ключ, и `kid`.

Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET) — SecurityTokenInvalidSignatureException

Что это означает

В отличие от IDX10503, ключ с `kid` токена нашёлся («Matched key was in 'TokenValidationParameters'» или «…'Configuration'»), но подпись с ним всё равно не прошла проверку. Либо у двух разных ключей один и тот же идентификатор ключа, либо токен изменили после подписания. ASP.NET Core отвечает `error_description="The signature is invalid"`.

Почему это происходит

Как исправить

  1. 1.

    Используйте идентификаторы ключей на основе отпечатка

    `kid`, вычисленный из материала ключа (RFC 7638), может совпасть, только если совпадают сами ключи.

    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.

    Договоритесь о байтах секрета

    Храните общий секрет в кодировке base64 и декодируйте его одинаково на обеих сторонах.

    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);

Связанные ошибки

Открыть всю базу ошибок подписей