第 5 章 配置主机名
5.1. 服务器端点
红帽构建的 Keycloak 会公开不同的端点,以便与应用程序进行通信,并允许访问管理控制台。这些端点可以归类为三个主要组:
- frontend
- 后端
- 管理控制台
每个组的基本 URL 对签发和验证令牌具有重要影响,关于如何为需要用户重定向到红帽构建的 Keycloak 的操作创建链接(例如,通过电子邮件链接重置密码)以及更重要的是,应用程序在从 realms/{realm-name}/.well-known/openid-configuration
中获取 OpenID Connect Discovery Document 操作时如何发现这些端点。
5.1.1. frontend
frontend 端点是指通过公共域访问,通常与通过前端通道进行的身份验证/授权流相关的。例如,当 SPA 想要验证其用户时,它会将他们重定向到 authorization_endpoint
,以便用户可以通过前端通道使用浏览器进行身份验证。
默认情况下,如果没有设置主机名设置,这些端点的基本 URL 基于传入请求,因此 HTTP 方案、主机、端口和路径与请求相同。默认行为还直接影响到服务器如何发出令牌,因为签发者也基于设置为 frontend 端点的 URL。如果没有设置主机名设置,则令牌签发者也会基于传入请求,并在客户端使用不同的 URL 请求令牌时缺少一致性。
当部署到生产环境时,对于 frontend 端点和令牌签发者,您通常需要一个一致的 URL,无论请求是如何构建的。为了实现此一致性,您可以设置主机名或
选项。
hostname
-url
大多数时候,应该足以设置 hostname
选项,以便仅更改前端 URL 的主机 :
bin/kc.[sh|bat] start --hostname=<host>
当使用 hostname
选项时,服务器将自动解析 HTTP 方案、端口和路径,以便:
-
使用 HTTPS 方案,除非您设置了
hostname-strict-
https
=false -
如果设置了
proxy-headers
选项,代理将使用默认端口(例如: 80 和 443)。如果代理使用不同的端口,则需要通过hostname-url
配置选项指定它
但是,如果您不仅要设置主机,同时希望设置方案、端口和路径,您可以设置 hostname-url
选项:
bin/kc.[sh|bat] start --hostname-url=<scheme>://<host>:<port>/<path>
这个选项为您提供了更大的灵活性,因为您可以通过单个选项设置 URL 的不同部分。请注意,主机名和
hostname-url
是互斥的。
5.1.2. 后端
后端端点是那些通过公共域或通过专用网络访问的端点。它们用于服务器和客户端之间的直接通信,而无需任何中间,但是普通 HTTP 请求。例如,在验证 SPA 后,希望通过向 token_endpoint
发送令牌请求来交换具有一组令牌的服务器发送的 代码
。
默认情况下,后端端点的 URL 也基于传入的请求。要覆盖此行为,请输入以下命令设置 hostname-strict-backchannel
配置选项:
bin/kc.[sh|bat] start --hostname=<value> --hostname-strict-backchannel=true
通过设置 hostname-strict-backchannel
选项,后端端点的 URL 将与 frontend 端点完全相同。
当所有连接到红帽构建的 Keycloak 的应用程序都通过公共 URL 进行通信时,请将 hostname-strict-backchannel
设置为 true
。否则,将此参数保留为 false
,以允许通过专用网络进行客户端-服务器通信。
5.1.3. 管理控制台
服务器使用特定 URL 公开管理控制台和静态资源。
默认情况下,管理控制台的 URL 也基于传入请求。但是,如果要使用特定 URL 限制对管理控制台的访问,您可以设置特定的主机或基本 URL。与设置 frontend URL 类似,您可以使用 hostname-admin
和 hostname-admin-url
选项来实现这一目的。请注意,如果启用了 HTTPS (http-enabled
配置选项被设置为 false,这是生产模式的默认设置),红帽构建的 Keycloak 服务器会自动假设您要使用 HTTPS URL。然后,管理控制台会尝试通过 HTTPS 联系红帽构建的 Keycloak,HTTPS URL 也用于其配置的重定向/Web 原始 URL。不建议在生产环境中使用,但您可以使用 HTTP URL 作为 hostname-admin-url
来覆盖此行为。
大多数时候,设置 hostname-admin
选项应该只更改管理控制台 URL 的主机 :
bin/kc.[sh|bat] start --hostname-admin=<host>
但是,如果您不仅要设置主机,同时希望设置方案、端口和路径,您可以设置 hostname-admin-url
选项:
bin/kc.[sh|bat] start --hostname-admin-url=<scheme>://<host>:<port>/<path>
请注意,hostname-admin
和 hostname-admin-url
是互斥的。
为减少受攻击面,红帽构建的 Keycloak 管理端点不应公开访问。因此,您可以使用反向代理来保护它们。有关使用反向代理公开的路径的更多信息 ,请参阅使用反向代理。