本文へスキップ
ecdsa.com
Microsoft.IdentityModel.Protocols (.NET).NET

エラーメッセージ

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 エラーが続きます。本当の原因は内部例外にあります。HTTPS が必須なのにメタデータアドレスが平文 HTTP の場合は IDX20108、それ以外の場合はネットワークまたは TLS のエラーを伴う IDX20804 です。

発生する理由

修正方法

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

    API が動作している場所から URL を取得する

    API のコンテナーまたは Pod の中からリクエストを実行してください。JSON 付きの 200 が返ればネットワークと 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

関連するエラー

署名エラーデータベースをすべて見る