Сообщение об ошибке
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"`.
Почему это происходит
Издатель провёл ротацию ключа подписи
частоСтатически настроенный ключ (или закешированная конфигурация, которая ни разу не обновлялась) знает только прежний `kid`. Entra ID, Auth0, Keycloak и IdentityServer — все они проводят ротацию ключей.
Authority или адрес метаданных другого тенанта
частоЭндпоинты Entra ID v1 вместо v2, другой идентификатор тенанта, политики B2C с отдельными метаданными или Authority из staging-окружения. Загруженные ключи действительны — но для чужих токенов.
Не удалось загрузить конфигурацию
иногдаЕсли загрузить метаданные не удалось, обработчик проверяет токен без единого ключа из конфигурации («Number of keys in Configuration: '0'»). Настоящая ошибка (IDX20803) записывается в лог отдельно.
Один IssuerSigningKey для издателя с несколькими ключами
иногдаКлюч из JWKS, жёстко прописанный в коде, работает, пока издатель не подпишет токен другим ключом из набора.
Как исправить
- 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.
Покажите скрытые значения на время отладки
По умолчанию 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; }
Связанные ошибки
IDX10511: Signature validation failed. Keys tried:Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET)IDX20803: Unable to obtain configuration from: 'http://keycloak:8080/realms/mai…Microsoft.IdentityModel.Protocols (.NET)no applicable key found in the JSON Web Key Setjose (JavaScript)Unable to find a signing key that matches '2026-10-rotated'jwks-rsa (Node.js)