Сообщение об ошибке
IDX20803: Unable to obtain configuration from: 'http://keycloak:8080/realms/main/.well-known/openid-configuration'.
Также выводится как
- System.InvalidOperationException: IDX20803: Unable to obtain configuration from:
- IDX20108: The address specified 'http://keycloak:8080/realms/main/.well-known/openid-configuration' is not valid as per HTTPS scheme. Please specify an https address for security reasons.
- IDX20804: Unable to retrieve document from:
Дальше сообщение продолжается фразой «Will retry at '…'. Exception: '…'» и текстом внутреннего исключения. URL — это ваш `Authority` + `/.well-known/openid-configuration` или ваш `MetadataAddress`.
Microsoft.IdentityModel.Protocols (.NET) — ConfigurationManager<OpenIdConnectConfiguration>, used by JwtBearer and OpenIdConnect handlers
Что это означает
Диспетчер конфигурации не смог загрузить (или разобрать) документ обнаружения OpenID Connect, поэтому у обработчика JWT Bearer или OpenID Connect нет ни издателя, ни ключей подписи. В результате отклоняется каждый токен, обычно с последующими ошибками IDX10500/IDX10503. Настоящая причина — во внутреннем исключении: IDX20108, если адрес метаданных использует обычный HTTP, а требуется HTTPS, в остальных случаях — IDX20804 с сетевой ошибкой или ошибкой TLS.
Почему это происходит
Адрес метаданных с HTTP при включённом RequireHttpsMetadata
частоК локальным контейнерам Keycloak или IdentityServer часто обращаются по адресу `http://service:8080`. По умолчанию `RequireHttpsMetadata` равен true, поэтому загрузчик метаданных отвергает адрес ещё до подключения (IDX20108).
Сервер Authority недоступен из API
частоDNS-имя, которое разрешается только за пределами кластера, межсетевой экран или прокси для исходящего трафика либо контейнерная сеть, где `localhost` означает сам контейнер.
Сертификату TLS не доверяют
иногдаСамоподписанные сертификаты или сертификаты внутреннего CA у поставщика удостоверений приводят к сбою HTTPS-запроса внутри контейнера API, если этот CA там не установлен.
Неверный путь в адресе Authority
иногдаБез `/realms/<name>` (Keycloak), идентификатора тенанта или `/v2.0` (Entra ID) URL документа обнаружения возвращает 404.
Как исправить
- 1.
Разрешайте метаданные по HTTP только в среде разработки
Привяжите `RequireHttpsMetadata = false` к среде разработки; в рабочей среде адрес Authority обязан использовать HTTPS, потому что загружаемые ключи определяют, какие токены вы принимаете.
csharp builder.Services.AddAuthentication().AddJwtBearer(options => { options.Authority = builder.Configuration["Auth:Authority"]; // Plain HTTP only for local development containers; production authorities must be HTTPS. options.RequireHttpsMetadata = !builder.Environment.IsDevelopment(); }); - 2.
Запросите URL оттуда, где работает API
Выполните запрос внутри контейнера или пода API. Ответ 200 с JSON подтверждает, что сеть и TLS в порядке; любой другой результат укажет, какой уровень нужно исправлять.
bash # From inside the API container: DNS, TLS and HTTP status of the metadata URL curl -sS -o /dev/null -w '%{http_code} %{ssl_verify_result}\n' https://login.example.com/realms/main/.well-known/openid-configuration
Связанные ошибки
IDX10503: Signature validation failed. The token's kid is: '2026-10', but did n…Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET)Expected 200 OK from the JSON Web Key Set HTTP responsejose (JavaScript)oidc: issuer URL provided to client ("https://accounts.example.com") did not ma…coreos/go-oidc (Go)