配置传出 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

两个数据包之间空闲的最大时间(毫秒),在此时间内套接字连接将超时。默认值: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 发送的传出请求配置一个逗号分隔的代理映射列表。代理映射由一个基于正则表达式的 hostname 模式和一个 proxy-uri 组成,格式为 hostname-pattern;proxy-uri

例如,考虑以下正则表达式

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

您可以通过输入以下命令应用基于正则表达式的 hostname 模式

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

反斜杠字符 \ 再次转义,因为微型配置文件使用它来解析映射数组。

要确定传出 HTTP 请求的代理,将执行以下操作

  • 目标 hostname 与所有配置的 hostname 模式进行匹配。

  • 使用第一个匹配模式的 proxy-uri。

  • 如果没有任何配置的模式与 hostname 匹配,则不使用任何代理。

当您的代理服务器需要身份验证时,请以 username:password@ 格式包含代理用户的凭据。例如

.*\.(google|googleapis)\.com;http://proxyuser:[email protected]: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

在此示例中,将发生以下结果

  • 使用代理-uri 的特殊值 NO_PROXY,这意味着对于与关联的 hostname 模式匹配的主机,不使用任何代理。

  • 一个万能模式结束代理映射,为所有传出请求提供默认代理。

相关选项

truststore-paths

将用作系统信任库的 pkcs12(p12 或 pfx 文件扩展名)、PEM 文件或包含这些文件的目录列表。

CLI: --truststore-paths
Env: KC_TRUSTSTORE_PATHS

此页面