bin/kc.[sh|bat] start --spi-connections-http-client-default-<configurationoption>=<value>
Keycloak 经常需要向其保护的应用程序和服务发出请求。Keycloak 使用 HTTP 客户端管理这些出站连接。本指南介绍如何配置客户端、连接池、代理环境设置、超时等。
请参阅 配置受信任证书,了解如何配置 Keycloak Truststore,以便 Keycloak 能够执行使用 TLS 的出站请求。
Keycloak 用于出站通信的 HTTP 客户端是高度可配置的。要配置 Keycloak 出站 HTTP 客户端,请输入以下命令
bin/kc.[sh|bat] start --spi-connections-http-client-default-<configurationoption>=<value>
以下是命令选项
建立连接超时前的最长时间,以毫秒为单位。默认值:未设置。
两个数据包之间不活动的最长时间,直到套接字连接超时,以毫秒为单位。默认值:5000 毫秒
出站连接的连接池大小。默认值:128。
每个主机可以池化的连接数。默认值:64。
最大连接生存时间,以毫秒为单位。默认值:未设置。
空闲连接在连接池中保持的最长时间,以毫秒为单位。空闲连接将由后台清理线程从池中删除。将此选项设置为 -1 以禁用此检查。默认值:900000。
启用或禁用 cookie 缓存。默认值:true。
Java 密钥库文件的文件路径。此密钥库包含用于 mTLS 的客户端证书。
客户端密钥库的密码。当设置 client-keystore
时为必需。
客户端私钥的密码。当设置 client-keystore 时为必需。
指定出站 HTTP 请求的代理配置。有关更多详细信息,请参阅 出站 HTTP 请求的代理映射。
如果出站请求需要 HTTPS 并且此配置选项设置为 true,则您不必指定信任存储。此设置仅应在开发期间使用,绝不能在生产环境中使用,因为它将禁用 SSL 证书的验证。默认值:false。
要配置出站请求以使用代理,您可以使用以下标准代理环境变量来配置代理映射:HTTP_PROXY
、HTTPS_PROXY
和 NO_PROXY
。
HTTP_PROXY
和 HTTPS_PROXY
变量表示用于出站 HTTP 请求的代理服务器。Keycloak 不区分这两个变量。如果您同时定义这两个变量,则 HTTPS_PROXY
优先,而与代理服务器使用的实际方案无关。
NO_PROXY
变量定义了一个逗号分隔的主机名列表,这些主机名不应使用代理。对于您指定的每个主机名,其所有子域也被排除在使用代理之外。
环境变量可以是小写或大写。小写优先。例如,如果您同时定义了 HTTP_PROXY
和 http_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 发送的出站请求配置逗号分隔的代理映射列表。代理映射由基于正则表达式的主机名模式和代理 URI 组成,格式为 hostname-pattern;proxy-uri
。
例如,考虑以下正则表达式
.*\.(google|googleapis)\.com
您可以通过输入以下命令来应用基于正则表达式的主机名模式
bin/kc.[sh|bat] start --spi-connections-http-client-default-proxy-mappings='.*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080'
反斜杠字符 \
再次被转义,因为 micro-profile 配置用于解析映射数组。
为了确定出站 HTTP 请求的代理,会发生以下情况
目标主机名与所有配置的主机名模式进行匹配。
使用第一个匹配模式的代理 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
在此示例中,会发生以下情况
代理 URI 的特殊值 NO_PROXY 被使用,这意味着对于匹配关联主机名模式的主机不使用代理。
catch-all 模式结束代理映射,为所有出站请求提供默认代理。