Mensagem de erro
IDX20803: Unable to obtain configuration from: 'http://keycloak:8080/realms/main/.well-known/openid-configuration'.
Também aparece como
- 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:
A mensagem continua com “Will retry at '…'. Exception: '…'” e o texto da exceção interna. A URL é o seu `Authority` + `/.well-known/openid-configuration` ou o seu `MetadataAddress`.
Microsoft.IdentityModel.Protocols (.NET) — ConfigurationManager<OpenIdConnectConfiguration>, used by JwtBearer and OpenIdConnect handlers
O que significa
O gerenciador de configuração não conseguiu baixar (ou interpretar) o documento de descoberta do OpenID Connect, então o handler JWT Bearer ou OpenID Connect fica sem emissor e sem chaves de assinatura. A partir daí, todo token é rejeitado, normalmente com erros IDX10500/IDX10503 em seguida. O motivo real está na exceção interna: IDX20108 quando o endereço de metadados é HTTP não criptografado e HTTPS é exigido; nos demais casos, IDX20804 com um erro de rede ou de TLS.
Por que acontece
Endereço de metadados HTTP com RequireHttpsMetadata ativado
comumContêineres locais de Keycloak ou IdentityServer costumam ser acessados como `http://service:8080`. `RequireHttpsMetadata` vale true por padrão, então o recuperador de metadados recusa o endereço antes de conectar (IDX20108).
A autoridade está inacessível a partir da API
comumDNS que só resolve fora do cluster, um firewall ou proxy de saída, ou uma rede de contêineres em que `localhost` significa o próprio contêiner.
Certificado TLS não confiável
ocasionalCertificados autoassinados ou de CA interna no provedor de identidade fazem a requisição HTTPS falhar dentro do contêiner da API, a menos que essa CA esteja instalada nele.
Caminho da autoridade errado
ocasionalA falta de `/realms/<name>` (Keycloak), do ID do locatário ou de `/v2.0` (Entra ID) faz a URL de descoberta retornar 404.
Como corrigir
- 1.
Permitir metadados HTTP apenas em desenvolvimento
Vincule `RequireHttpsMetadata = false` ao ambiente de desenvolvimento; em produção, a autoridade deve usar HTTPS, porque as chaves que você baixa decidem quais tokens você aceita.
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.
Buscar a URL a partir de onde a API roda
Faça a requisição de dentro do contêiner ou pod da API. Um 200 com JSON confirma a rede e o TLS; qualquer outra resposta indica a camada que precisa ser corrigida.
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
Erros relacionados
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)