送信 HTTP リクエストの設定

送信 HTTP リクエストに使用されるクライアントの設定方法。

Keycloak は、保護対象のアプリケーションやサービスに対してリクエストを行う必要が часто あります。Keycloak は、HTTP クライアントを使用してこれらの送信接続を管理します。このガイドでは、クライアント、接続プール、プロキシ環境設定、タイムアウトなどの設定方法について説明します。

TLS 接続のための信頼済み証明書の設定

Keycloak が TLS を使用して送信リクエストを実行できるように Keycloak トラストストアを設定する方法については、信頼済み証明書の設定 を参照してください。

クライアント設定コマンド

Keycloak が送信通信に使用する HTTP クライアントは高度に設定可能です。Keycloak 送信 HTTP クライアントを設定するには、次のコマンドを入力します

bin/kc.[sh|bat] start --spi-connections-http-client-default-<configurationoption>=<value>

以下はコマンドオプションです

establish-connection-timeout-millis

接続確立がタイムアウトになるまでの最大時間(ミリ秒)。デフォルト:未設定。

socket-timeout-millis

ソケット接続がタイムアウトになるまでの、2 つのデータパケット間の非アクティブ時間の最大時間(ミリ秒)。デフォルト:5000ms

connection-pool-size

送信接続の接続プールのサイズ。デフォルト:128。

max-pooled-per-route

ホストごとにプールできる接続数。デフォルト:64。

connection-ttl-millis

接続の最大生存時間(ミリ秒)。デフォルト:未設定。

max-connection-idle-time-millis

アイドル接続が接続プールに留まる最大時間(ミリ秒)。アイドル接続は、バックグラウンドクリーナースレッドによってプールから削除されます。このチェックを無効にするには、このオプションを -1 に設定します。デフォルト:900000。

disable-cookies

Cookie のキャッシュを有効または無効にします。デフォルト:true。

client-keystore

Java キーストアファイルへのファイルパス。このキーストアには、mTLS 用のクライアント証明書が含まれています。

client-keystore-password

クライアントキーストアのパスワード。client-keystore が設定されている場合は必須。

client-key-password

クライアントの秘密鍵のパスワード。client-keystore が設定されている場合は必須。

proxy-mappings

送信 HTTP リクエストのプロキシ設定を指定します。詳細については、送信 HTTP リクエストのプロキシマッピング を参照してください。

disable-trust-manager

送信リクエストに HTTPS が必要で、この設定オプションが true に設定されている場合、トラストストアを指定する必要はありません。この設定は、SSL 証明書の検証を無効にするため、開発中のみ使用し、本番環境では絶対に使用しないでください。デフォルト:false。

送信 HTTP リクエストのプロキシマッピング

送信リクエストでプロキシを使用するように設定するには、次の標準プロキシ環境変数を使用してプロキシマッピングを設定できます:HTTP_PROXYHTTPS_PROXY、および NO_PROXY

  • HTTP_PROXY および HTTPS_PROXY 変数は、送信 HTTP リクエストに使用されるプロキシサーバーを表します。Keycloak は、2 つの変数を区別しません。両方の変数を定義した場合、プロキシサーバーが使用する実際​​のスキームに関係なく、HTTPS_PROXY が優先されます。

  • NO_PROXY 変数は、プロキシを使用しないホスト名のカンマ区切りリストを定義します。指定した各ホスト名について、そのすべてのサブドメインもプロキシの使用から除外されます。

環境変数は小文字または大文字にすることができます。小文字が優先されます。たとえば、HTTP_PROXYhttp_proxy の両方を定義した場合、http_proxy が使用されます。

プロキシマッピングと環境変数の例
HTTPS_PROXY=https://www-proxy.acme.com:8080
NO_PROXY=google.com,login.facebook.com

この例では、次の結果が発生します

  • すべての送信リクエストはプロキシ https://www-proxy.acme.com:8080 を使用します。ただし、google.com や auth.google.com などの google.com のサブドメインへのリクエストは除きます。

  • login.facebook.com とそのすべてのサブドメインは、定義されたプロキシを使用しませんが、groups.facebook.com は login.facebook.com のサブドメインではないため、プロキシを使用します。

正規表現を使用したプロキシマッピング

プロキシマッピングに環境変数を使用する代わりに、Keycloak によって送信される送信リクエストのプロキシマッピングのカンマ区切りリストを設定する方法があります。プロキシマッピングは、regex ベースのホスト名パターンと proxy-uri で構成され、hostname-pattern;proxy-uri の形式を使用します。

たとえば、次の正規表現を考えてみましょう

.*\.(google|googleapis)\.com

このコマンドを入力して、regex ベースのホスト名パターンを適用します

bin/kc.[sh|bat] start --spi-connections-http-client-default-proxy-mappings='.*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080'

バックスラッシュ文字 \ は、マイクロプロファイル構成がマッピングの配列を解析するために再度エスケープされます。

送信 HTTP リクエストのプロキシを決定するために、次のことが起こります

  • ターゲットホスト名は、設定されたすべてのホスト名パターンと照合されます。

  • 最初に一致したパターンの proxy-uri が使用されます。

  • 設定されたパターンがホスト名と一致しない場合、プロキシは使用されません。

プロキシサーバーが認証を必要とする場合は、プロキシユーザーの資格情報を username:password@ の形式で含めます。例:

.*\.(google|googleapis)\.com;http://proxyuser:password@www-proxy.acme.com:8080
プロキシマッピングの正規表現の例
# All requests to Google APIs use http://www-proxy.acme.com:8080 as proxy
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080

# All requests to internal systems use no proxy
.*\.acme\.com;NO_PROXY

# All other requests use http://fallback:8080 as proxy
.*;http://fallback:8080

この例では、次のことが起こります

  • proxy-uri の特殊な値 NO_PROXY が使用されます。これは、関連付けられたホスト名パターンに一致するホストにはプロキシが使用されないことを意味します。

  • キャッチオールパターンはプロキシマッピングを終了し、すべての送信リクエストにデフォルトのプロキシを提供します。

関連オプション

truststore-paths

システムトラストストアとして使用される pkcs12(p12、pfx、または pkcs12 ファイル拡張子)、PEM ファイル、またはこれらのファイルを含むディレクトリのリスト。

CLI: --truststore-paths
Env: KC_TRUSTSTORE_PATHS

このページについて