2.4. 其他更改


以下变化涉及内部行为更改,以防止常见错误配置、解决问题的更改以及简化运行红帽构建的 Keycloak 的其他更改。

2.4.1. 零配置安全集群通信

对于集群多个节点,红帽构建的 Keycloak 使用分布式缓存。从此发行版本对所有基于 TCP 的传输堆栈开始,节点之间的通信与 TLS 加密,并使用自动生成的临时密钥和证书进行保护。

如果您不使用基于 TCP 的传输堆栈,建议迁移到 jdbc-ping 传输堆栈,以便从简化的配置和增强的安全性中受益。

如果您提供自己的密钥存储和信任存储来保护之前版本中 TCP 传输堆栈通信,则现在建议迁移到自动生成的临时密钥和证书,以便从简化的设置中获益。

如果您使用自定义传输堆栈,可以通过将 option cache-embedded-mtls-enabled 选项设置为 false 来禁用此默认行为。

如果使用服务网格,请将其配置为允许红帽构建的 Keycloak Pod 之间的直接 mTLS 通信。

如需了解更多详细信息,请参阅 保护传输堆栈

添加新用户、组或角色时,LDAP 供应商始终将其存储在为搜索配置的同一基本 DN 中。但是,在某些部署中,管理员可能希望使用 子树 范围配置更广泛的 DN,以从多个子DN获取用户(或组/角色),但它们不希望新用户(或组/角色)存储在 LDAP 中的这个基本 DN 中。相反,他们希望为其选择一个子DN。

现在可以使用 LDAP 提供程序中的新的 Relative User Creation DN 配置选项控制在 LDAP 提供程序以及 LDAP 组和角色映射器中创建新用户、组或角色映射的位置。如需了解更多详细信息,请参阅 LDAP admin

内置 X.509 客户端证书查找供应商现在反映了 proxy-trusted-addresses 配置选项。现在,只有在代理被信任时,才会处理通过 HTTP 标头提供的证书,或者 proxy-trusted-addresses 没有被设置。

2.4.4. Operator 创建 NetworkPolicies 来限制流量

现在,Red Hat build of Keycloak Operator 会默认创建一个 NetworkPolicy,将流量限制为用于红帽构建的 Keycloak 分布式缓存的内部端口。

这增强了一个安全的默认设置,并尽可能减少新设置的配置步骤。这个更改旨在向现有部署向后兼容,因此升级时不需要额外的步骤。您可以通过在 Keycloak CR 中禁用 NetworkPolicies 来返回到之前的行为。

如果您的部署脚本为 Red Hat build of Keycloak 添加显式 NetworkPolicies,请考虑删除它们并迁移到 Keycloak CR 中提供的新功能,作为升级到升级。

如需了解更多详细信息,请参阅 Operator 高级配置

在以前的版本中,如果使用相同的身份验证会话(相同身份验证会话),则重置凭证流(忘记密码 功能)会在重置凭证后保持登录。对于联邦用户供应商,此行为可能是安全问题。例如,供应商实施检测到用户 启用 并执行密码更改,但某种程度上,用户密码的验证失败。在这种情况下,重置凭据流允许用户在密码成功更改后登录;但是,使用正常浏览器流的登录将被拒绝。这不是一个常见情况,但默认情况下应该避免它。

因此,验证器的 reset-credential-email (Send Reset Email)有一个新的配置选项,名为 force-login (在重置后强制登录), false (始终强制登录), false (在使用相同的身份验证会话时保留用户登录), 且只 联邦用户验证,并保持之前存储在红帽内部数据库中的用户的行为。

有关更改此选项的更多信息,请参阅启用忘记密码

红帽构建的 Keycloak 中的任何离线会话都是从在线会话创建的。当请求 offline_access 范围时,当前在线会话用于为客户端创建关联的离线会话。因此,任何 offline_access 请求已完成,直到现在创建两个会话:一个在线会话和一个离线。这种情况会导致不可靠行为。例如,当只请求了带有 scope=offline_access 的登录时,可以创建未使用的在线会话。在大多数情况下,这个会话是无用的,并导致服务器资源的不必要的消耗。

从这个版本开始,如果直接请求 offline_scope 作为会话的第一次交互,Red Hat build of Keycloak 会删除初始在线会话。客户端在代码后检索与离线会话关联的令牌交换后的离线令牌,但之前的在线会话会被删除。如果在 offline_scope 请求之前使用在线会话,则在线会话仍保持活跃状态。此情形还意味着,如果在使用 scope=offline_access 的登录请求并且用户之前没有在 SSO 中进行身份验证,则不会在浏览器中创建 SSO 会话。虽然新行为有意义,因为客户端应用程序只是要求提供离线令牌,但可能会影响在初始 offline_scope 令牌请求后依赖在线会话仍然活跃的一些场景。

红帽构建的 Keycloak 在域级别引入了一个名为 service_account 的新客户端范围。此范围负责使用协议映射器为 client_credentials 授权(client_idclientHostclientAddress)添加特定的声明。当客户端配置中设置了 serviceAccountsEnabled 选项或取消设置时,此范围将自动分配给客户端,并从客户端取消分配。

在以前的版本中,当客户端配置为启用服务帐户时,三个映射程序(Client IdClient HostClient IP Address)直接添加到专用范围内,它们永远不会被删除。

对于大多数红帽构建的 Keycloak 部署,此行为应该和以前一样,因为令牌中的声明实际上和以前一样。当您使用客户端凭证授权时,您可能会遇到影响,且您使用一些工具来准备红帽构建的 Keycloak 环境,这些工具手动删除或更新上述的三个协议映射程序。例如,如果您使用 admin CLI 脚本为客户端启用 service-account,然后删除内置的 service-account 协议映射器,您可以调整 CLI 以代替从客户端中删除 service_account 客户端范围的分配,而不是删除协议映射器。

当客户端被配置为使用 Signed JWTSigned JWT with Client Secret 类型进行身份验证时,Red Hat build of Keycloak 现在为令牌强制执行最大过期。这意味着,虽然令牌中的过期(过期)声明可能较晚,但红帽构建的 Keycloak 不会在最大过期时间前接受签发的令牌。默认值为 60 秒。请注意,在发送 JWT 令牌以进行身份验证之前,应先发布 JWT 令牌。因此,客户端有一个一分钟窗口来发送令牌以进行登录。在客户端凭证选项卡中,可以使用 Max expiration 配置选项来调优此过期。如需了解更多详细信息,请参阅 机密客户端凭证

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat