Saltar al contenido
ecdsa.com
Microsoft.IdentityModel.Protocols (.NET).NET

Mensaje de error

IDX20803: Unable to obtain configuration from: 'http://keycloak:8080/realms/main/.well-known/openid-configuration'.

También se muestra 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:

El mensaje continúa con «Will retry at '…'. Exception: '…'» y el texto de la excepción interna. La URL es tu `Authority` + `/.well-known/openid-configuration` o tu `MetadataAddress`.

Microsoft.IdentityModel.Protocols (.NET) — ConfigurationManager<OpenIdConnectConfiguration>, used by JwtBearer and OpenIdConnect handlers

Qué significa

El administrador de configuración no pudo descargar (o analizar) el documento de descubrimiento de OpenID Connect, así que el controlador de JWT bearer o de OpenID Connect no tiene emisor ni claves de firma. A partir de ahí se rechazan todos los tokens, y normalmente aparecen después errores IDX10500/IDX10503. El motivo real está en la excepción interna: IDX20108 cuando la dirección de metadatos es HTTP sin cifrar y se requiere HTTPS, o IDX20804 con un error de red o de TLS en los demás casos.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Permitir metadatos HTTP solo en desarrollo

    Vincula `RequireHttpsMetadata = false` al entorno de desarrollo; en producción la autoridad debe ser HTTPS, porque las claves que descargas deciden qué tokens aceptas.

    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. 2.

    Solicitar la URL desde donde se ejecuta la API

    Lanza la solicitud dentro del contenedor o pod de la API. Un 200 con JSON confirma que la red y TLS funcionan; cualquier otra cosa indica la capa que hay que corregir.

    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

Errores relacionados

Explorar toda la base de datos de errores de firma