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

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

IDX10503: Signature validation failed. The token's kid is: '2026-10', but did not match any keys in TokenValidationParameters or Configuration.

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

  • IDX10503: Signature validation failed. Token does not have a kid. Keys tried:
  • IDX10517: Signature validation failed. The token's kid is missing.
  • Bearer error="invalid_token", error_description="The signature key was not found"

Полный текст продолжается списком «Keys tried: …», количеством ключей и заполнителями `[PII of type … is hidden]` (чтобы увидеть скрытые значения, в среде разработки задайте `IdentityModelEventSource.ShowPII = true`). Проверено на 6.36.0, 7.7.1 и 8.23.0: в 6.x формулировка такая: «IDX10503: Signature validation failed. Token does not have a kid. Keys tried: …»; 7.x и 8.x используют формулировку выше, а о токене без `kid` сообщают как IDX10517 «The token's kid is missing».

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

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

Токен указывает свой ключ подписи через `kid`, но ни у одного ключа в `TokenValidationParameters` (`IssuerSigningKey(s)`) или в конфигурации, загруженной из JWKS сервера Authority, нет такого идентификатора ключа. До вычисления подписи дело не дошло: подходящего ключа не нашлось. В ASP.NET Core клиент видит `WWW-Authenticate: Bearer error="invalid_token", error_description="The signature key was not found"`.

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

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

  1. 1.

    Пусть обработчик сам загружает ключи с сервера Authority

    Если задан `Authority`, `JwtBearer` загружает JWKS издателя через механизм обнаружения OpenID Connect (discovery) и обновляет его периодически, а также когда токен ссылается на неизвестный ключ (`RefreshOnIssuerKeyNotFound`, включено по умолчанию).

    csharp
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            // Keys come from {Authority}/.well-known/openid-configuration -> jwks_uri and are refreshed automatically.
            options.Authority = "https://login.example.com/";
            options.Audience = "api://orders";
        });
  2. 2.

    Покажите скрытые значения на время отладки

    По умолчанию IdentityModel скрывает идентификаторы ключей и содержимое токенов в тексте исключений. Включайте `ShowPII` только в среде разработки, чтобы увидеть, какие ключи были опробованы.

    csharp
    // Development only: show the hidden values ([PII of type ... is hidden]) in IDX messages.
    if (builder.Environment.IsDevelopment())
    {
        Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
    }

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

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