設定外送 HTTP 請求

如何設定用於外送 HTTP 請求的用戶端。

Keycloak 通常需要向其保護的應用程式和服務發出請求。Keycloak 使用 HTTP 用戶端管理這些外送連線。本指南說明如何設定用戶端、連線池、代理環境設定、逾時等等。

設定 TLS 連線的信任憑證

請參閱設定信任憑證,了解如何設定 Keycloak 信任儲存區,使 Keycloak 能夠使用 TLS 執行外送請求。

用戶端設定命令

Keycloak 用於外送通訊的 HTTP 用戶端具有高度可配置性。若要設定 Keycloak 外送 HTTP 用戶端,請輸入以下命令

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

以下是命令選項

establish-connection-timeout-millis

建立連線逾時的最大時間(以毫秒為單位)。預設值:未設定。

socket-timeout-millis

兩個數據封包之間不活動的最大時間,直到 socket 連線逾時(以毫秒為單位)。預設值:5000 毫秒

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_PROXYNO_PROXY

  • HTTP_PROXYHTTPS_PROXY 變數代表用於外送 HTTP 請求的代理伺服器。Keycloak 不區分這兩個變數。如果您同時定義這兩個變數,則無論代理伺服器實際使用的協定為何,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 或 google.com 的任何子網域(例如 auth.google.com)的請求除外。

  • login.facebook.com 及其所有子網域不使用定義的代理,但 groups.facebook.com 使用代理,因為它不是 login.facebook.com 的子網域。

使用正規表示式的代理對應

除了使用環境變數進行代理對應之外,另一種方法是針對 Keycloak 發送的外送請求設定以逗號分隔的代理對應清單。代理對應包含一個基於 regex 的主機名稱模式和一個 proxy-uri,格式為 hostname-pattern;proxy-uri

例如,請考慮以下 regex

.*\.(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 副檔名)、PEM 檔案或包含這些檔案的目錄的清單,這些檔案將用作系統信任儲存區。

CLI: --truststore-paths
Env: KC_TRUSTSTORE_PATHS

在此頁面上