第 7 章 使用公共主机名
Red Hat Single Sign-On 将公共主机名用于很多事项。例如,在令牌签发者字段中,在密码重置电子邮件中发送的 URL。
Hostname SPI 提供了为请求配置主机名的方法。默认供应商允许为 frontend 请求设置固定 URL,同时允许后端请求基于请求 URI。如果内置供应商不提供所需的功能,还可以开发自己的供应商。
7.1. 默认供应商
默认主机名供应商使用配置的 frontendUrl
作为 frontend 请求的基本 URL (来自用户代理的请求),并使用请求 URL 作为后端请求(直接来自客户端的请求)。
frontend 请求不必具有与 Keycloak 服务器相同的 context-path。这意味着,您可以在 https://auth.example.org
或 https://example.org/keycloak
上公开 Keycloak,而内部的 URL 可以是 https://10.0.0.10:8080/auth。
这样,用户代理(浏览器)可以通过公共域名向 Red Hat Single Sign-On 发送请求,而内部客户端可以使用内部域名或 IP 地址。
这反映在 OpenID Connect Discovery 端点中,例如 authorization_endpoint
使用 frontend URL,而 token_endpoint
使用后端 URL。此时,实例的公共客户端将通过公共端点联系 Keycloak,这将导致 authorization_endpoint
和 token_endpoint
的基础。
要为 Keycloak 设置 frontendUrl,您可以将 -Dkeycloak.frontendUrl=https://auth.example.org
传递给启动,或者在 standalone.xml
中配置它。请参见以下示例:
<spi name="hostname"> <default-provider>default</default-provider> <provider name="default" enabled="true"> <properties> <property name="frontendUrl" value="https://auth.example.com"/> <property name="forceBackendUrlToFrontendUrl" value="false"/> </properties> </provider> </spi>
使用以下命令更新 frontendUrl
:
/subsystem=keycloak-server/spi=hostname/provider=default:write-attribute(name=properties.frontendUrl,value="https://auth.example.com")
如果您希望所有请求通过公共域名,您也可以强制后端请求使用 frontend URL,方法是将 forceBackendUrlToFrontendUrl
设置为 true
。
也可以覆盖各个域的默认前端 URL。这可以在管理控制台中完成。
如果您不想在公共域中公开 admin 端点和控制台,请使用 adminUrl 属性 adminUrl
为 admin 控制台设置固定 URL,这与 frontendUrl
不同。另外,还需要从外部阻止对 /auth/admin
的访问,以获取有关如何引用 服务器管理指南 的详细信息。