bin/kc.[sh|bat] start --spi-connections-http-client-default-<configurationoption>=<value>
Keycloak 通常需要向其保护的应用程序和服务发出请求。Keycloak 使用 HTTP 客户端管理这些传出连接。本指南介绍如何配置客户端、连接池、代理环境设置、超时等。
请参阅 配置受信任证书,了解如何配置 Keycloak 信任库,以便 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 发送的传出请求配置一个逗号分隔的代理映射列表。代理映射由一个基于正则表达式的 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 模式匹配的主机,不使用任何代理。
一个万能模式结束代理映射,为所有传出请求提供默认代理。
值 | |
---|---|
|