Keycloak 26.0.0 发布

2024 年 10 月 04 日

要下载发行版,请访问 Keycloak 下载

亮点

支持的组织

从 Keycloak 26 开始,组织功能已完全支持。

客户端库更新

客户端库的专用发布周期

从本版本开始,一些 Keycloak 客户端库将拥有独立于 Keycloak 服务器发布周期的发布周期。26.0.0 版本可能是最后一次将客户端库与 Keycloak 服务器一起发布的版本。但从现在开始,客户端库可能会在与 Keycloak 服务器不同的时间发布。

客户端库是这些工件

  • Java 管理客户端 - Maven 工件 org.keycloak:keycloak-admin-client

  • Java 授权客户端 - Maven 工件 org.keycloak:keycloak-authz-client

  • Java 策略执行器 - Maven 工件 org.keycloak:keycloak-policy-enforcer

将来可能会包含更多库。

客户端库支持 Java 8,因此可以与部署在旧应用程序服务器上的客户端应用程序一起使用。

客户端库与服务器的兼容性

从本版本开始,我们正在测试和支持与相同服务器版本和几个之前的主要服务器版本一起使用的客户端库。

有关支持的客户端库版本与服务器版本的详细信息,请参阅 升级指南

默认情况下持久化的用户会话

Keycloak 25 引入了 persistent-user-sessions 功能。启用此功能后,所有用户会话都将持久化到数据库中,而不是以前的行为,即只持久化离线会话。在 Keycloak 26 中,此功能默认启用。这意味着默认情况下所有用户会话都将持久化到数据库中。

可以通过禁用该功能将此行为还原到以前的状态。有关详细信息,请参阅 配置分布式缓存 指南中的“易失性用户会话”部分。

有关如何升级的信息,请参阅 升级指南

新的默认登录主题

现在有一个新版本(v2)的 keycloak 登录主题,它提供了改进的外观和感觉,包括根据用户偏好自动切换到深色主题的支持。

以前版本(v1)现在已弃用,将在未来版本中删除。

对于所有新的领域,keycloak.v2 将是默认登录主题。此外,任何从未显式设置登录主题的现有领域都将切换到 keycloak.v2

高可用性多站点部署

Keycloak 26 对推荐的 HA 多站点架构进行了重大改进,最值得注意的是

  • Keycloak 部署现在能够同时在两个站点处理用户请求。

  • 现在需要对站点之间连接进行主动监控,以便在发生故障时更新站点之间的复制。

  • 负载均衡器蓝图已更新为使用 AWS 全球加速器,因为这避免了由于客户端的 DNS 缓存造成的长时间故障转移。

  • 持久化用户会话现在是该架构的要求。因此,用户会话将在 Keycloak 或 Infinispan 升级时保留。

有关如何迁移的信息,请参阅 升级指南

管理员引导和恢复

过去,当所有管理员用户都被锁定时,重新获得对 Keycloak 实例的访问权限是一个具有挑战性和复杂的过程。认识到这些挑战,并旨在显著增强用户体验,Keycloak 现在提供了几种简单的方法来引导临时管理员帐户并恢复丢失的管理员访问权限。

现在可以使用特定的选项运行 startstart-dev 命令来创建临时管理员帐户。此外,还引入了一个新的专用命令,该命令允许用户轻松地重新获得管理员访问权限。

有关此主题的详细说明和更多信息,请参阅 管理员引导和恢复 指南。

OpenTelemetry 跟踪预览

对 OpenTelemetry 跟踪的底层 Quarkus 支持已公开到 Keycloak,并允许获取应用程序跟踪以获得更好的可观察性。它有助于查找性能瓶颈,确定应用程序故障的原因,跟踪请求通过分布式系统的过程等等。该支持处于预览模式,我们很乐意获得任何反馈。

有关更多信息,请参阅 启用跟踪 指南。

用于可验证凭证签发的 OpenID

用于可验证凭证签发的 OpenID (OID4VCI) 仍然是 Keycloak 中的一项实验性功能,但在本版本中得到了很大改进。您将在 Keycloak OAuth SIG 中找到重要的开发和讨论。Keycloak 社区的任何人都可以加入。

非常感谢 OAuth SIG 组的所有成员参与该功能的开发和讨论。特别感谢 Francis PouatchaPascal KnüppelTakashi NorimatsuIngrid KamgaStefan WiedemannThomas Darimont

DPoP 改进

DPoP (OAuth 2.0 证明拥有) 预览功能有所改进。DPoP 现在支持所有授权类型。在以前的版本中,此功能仅支持 authorization_code 授权类型。UserInfo 端点也支持 DPoP 令牌类型。

非常感谢 Pascal Knüppel 的贡献。

删除 GELF 日志处理程序

GELF 支持已经弃用了一段时间,在本版本中它终于从 Keycloak 中删除。其他日志处理程序可用,并完全支持用作 GELF 的替代品,例如 Syslog。有关详细信息,请参阅 日志记录指南

用于管理员 REST API 的轻量级访问令牌

轻量级访问令牌现在可以在管理员 REST API 上使用。security-admin-consoleadmin-cli 客户端现在默认使用轻量级访问令牌,因此这两个客户端现在启用了“始终使用轻量级访问令牌”和“允许完整范围”。但是,管理员控制台中的行为应保持不变。如果您对这两个客户端进行了更改,并且如果您将它们用于其他目的,请务必小心。

Keycloak JavaScript 适配器现在独立

Keycloak JavaScript 适配器现在是一个独立的库,因此不再从 Keycloak 服务器静态提供。目标是从 Keycloak 服务器解耦该库,以便可以独立地重构它,简化代码并使其在将来更易于维护。此外,该库现在没有第三方依赖项,这使其更轻便,更易于在不同的环境中使用。

有关更改的完整细目,请参阅 升级指南

删除主机名 v1 功能

已删除已弃用的主机名 v1 功能。此功能在 Keycloak 25 中已弃用,并由主机名 v2 取代。如果您仍在使用此功能,则必须迁移到主机名 v2。有关详细信息,请参阅 配置主机名 (v2)初始迁移指南

从根目录自动重定向到相对路径

当指定 http-relative-path 属性时,用户会自动重定向到 Keycloak 托管的路径。这意味着当相对路径设置为 /auth 时,用户访问 localhost:8080/,页面将重定向到 localhost:8080/auth

当指定 http-management-relative-pathhttp-relative-path 属性时,管理界面也是如此。

它改善了用户体验,因为用户不再需要显式地将相对路径设置为 URL。

在重启之间持久化撤销的访问令牌

在本版本中,当使用嵌入式缓存时,撤销的访问令牌默认写入数据库,并在集群重启时重新加载。

有关如何迁移的信息,请参阅 升级指南

客户端策略中的客户端属性条件

基于客户端属性的条件已添加到客户端策略中。您可以使用条件来指定具有指定客户端属性的客户端是否具有指定的值。如客户端策略文档中所述,在评估此条件时可以使用 AND 或 OR 条件。

非常感谢 Yoshiyuki Tabata 的贡献。

为日志处理程序指定不同的日志级别

可以为所有可用的日志处理程序(例如 consolefilesyslog)指定日志级别。更细粒度的做法提供了在整个应用程序中控制日志记录并根据您的需求进行调整的能力。

有关更多信息,请参阅 日志记录指南

删除代理选项

已删除已弃用的 proxy 选项。此选项在 Keycloak 24 中已弃用,并由 proxy-headers 选项与主机名选项结合使用(如有需要)代替。有关详细信息,请参阅 使用反向代理初始迁移指南

添加了 proxy-trusted-addresses 选项

proxy-headers 选项设置为指定受信任代理地址的白名单时,可以使用 proxy-trusted-addresses。如果给定请求的代理地址不受信任,则不会使用相应的代理标头值。

添加了 proxy-protocol-enabled 选项

proxy-protocol-enabled 选项控制服务器是否应在代理后面为请求提供服务时使用 HA PROXY 协议。当设置为 true 时,返回的远程地址将是实际连接客户端的地址。

添加了重新加载信任和密钥材料的选项

可以设置 https-certificates-reload-period 选项来定义 https-* 选项引用的密钥库、信任库和证书文件的重新加载周期。使用 -1 禁用重新加载。默认为 1 小时 (1 小时)。

添加了用于配置缓存最大计数的选项

可以设置 --cache-embedded-${CACHE_NAME}-max-count= 来定义指定缓存中的缓存条目数的上限。

https-trust-store-* 选项已取消弃用

根据社区的反馈,我们决定取消弃用 https-trust-store-* 选项,以允许更好地细化受信任证书。

java-keystore 密钥提供程序支持更多算法和保险库密钥

java-keystore 密钥提供程序(允许从外部 java 密钥库文件加载领域密钥)已修改为管理所有 Keycloak 算法。此外,密钥库和密钥机密(用于从存储库中检索实际密钥)可以使用 保险库 配置。因此,Keycloak 领域可以将任何密钥外部化到加密文件中,而无需在数据库中存储敏感数据。

有关此主题的更多信息,请参阅 配置领域密钥

添加对 ECDH-ES 加密密钥管理算法的支持

现在 Keycloak 允许将 ECDH-ES、ECDH-ES+A128KW、ECDH-ES+A192KW 或 ECDH-ES+A256KW 配置为客户端的加密密钥管理算法。椭圆曲线 Diffie-Hellman 临时静态 (ECDH-ES) 密钥协商规范为 JWT 引入了三个新的头部参数:epkapuapv。当前 Keycloak 实现只管理必填的 epk,而另外两个(可选)参数永远不会添加到头部。有关这些算法的更多信息,请参阅 JSON Web 算法 (JWA)

此外,还提供了一个新的密钥提供程序 ecdh-generated 用于生成 realm 密钥,并且在 Java KeyStore 提供程序中添加了对 ECDH 算法的支持。

非常感谢 Justin Tay 的贡献。

支持 realm 中的多个社交代理实例

现在可以在 realm 中拥有多个相同社交代理的实例。

大多数情况下,realm 不需要多个相同社交代理的实例。但由于引入了 organization 功能,应该可以将相同社交代理的不同实例链接到不同的组织。

创建社交代理时,现在应像其他任何代理一样提供 Alias 和可选的 Display name

针对凭据的新的通用事件类型

现在有用于更新 (UPDATE_CREDENTIAL) 和删除 (REMOVE_CREDENTIAL) 凭据的通用事件。凭据类型在事件的 credential_type 属性中描述。电子邮件事件监听器支持新的事件类型。

以下事件类型现在已弃用,将在未来版本中删除:UPDATE_PASSWORDUPDATE_PASSWORD_ERRORUPDATE_TOTPUPDATE_TOTP_ERRORREMOVE_TOTPREMOVE_TOTP_ERROR

base/loginkeycloak.v2/login 主题中的 template.ftl 文件现在允许自定义登录框的页脚。这可用于显示常见链接或在页面末尾包含自定义脚本。

新的 footer.ftl 模板提供了一个 content 宏,该宏在“登录框”底部呈现。

Keycloak CR 支持标准调度选项

Keycloak CR 现在公开了控制 Keycloak Pod 调度的首要属性。

有关详细信息,请参阅 Operator 高级配置

KeycloakRealmImport CR 支持占位符替换

KeycloakRealmImport CR 现在公开了 spec.placeholders 用于在导入中创建环境变量以进行占位符替换。

有关详细信息,请参阅 Operator Realm 导入

配置 LDAP 连接池

在此版本中,LDAP 连接池配置完全依赖于系统属性。

有关详细信息,请参阅 配置连接池

Infinispan 序列化更改为 Infinispan Protostream

序列化是将 Java 对象转换为字节以通过网络在 Keycloak 服务器之间发送它们的流程。在 Keycloak 26 中,我们将序列化格式从 JBoss 序列化更改为 Infinispan Protostream。

警告
JBoss 序列化和 Infinispan Protostream 不兼容,使用不当会导致数据丢失。因此,升级到此版本时会清除所有缓存。

Infinispan Protostream 基于 协议缓冲区 (proto 3),它具有向后/向前兼容性的优势。

删除 OSGi 元数据

由于所有使用 OSGi 元数据的 Java 适配器都已删除,因此我们已停止为我们的 jar 生成 OSGi 元数据。

为了提高组的可扩展性,现在在删除 realm 时直接从数据库中删除组。因此,在删除 realm 时不再触发与组相关的事件,例如 GroupRemovedEvent

有关如何迁移的信息,请参阅 升级指南

身份提供者不再从 realm 表示中获取

作为 realm 和组织在具有许多身份提供者时的可扩展性改进的一部分,realm 表示不再保存身份提供者列表。但是,在导出 realm 时,它们仍然可以从 realm 表示中获取。

有关如何迁移的信息,请参阅 升级指南

安全应用程序文档已转换为指南格式

安全应用程序和服务 文档已转换为类似于前几个版本中转换的 服务器安装和配置 文档的新格式。该文档现在位于 Keycloak 指南 下。

删除旧版 cookie

Keycloak 不再发送 _LEGACY cookie,这些 cookie 是作为对不支持 cookie 上的 SameSite 标志的旧版浏览器的变通方案引入的。

_LEGACY cookie 还起着另一个作用,即允许从不安全的上下文中登录。虽然,这在 Keycloak 的生产部署中完全不推荐,但在 localhost 外部通过 http 访问 Keycloak 非常频繁。作为对 _LEGACY cookie 的替代方案,Keycloak 现在不设置 secure 标志,而是设置 SameSite=Lax 而不是 SameSite=None,因为它检测到使用了不安全的上下文。

UserRepresentation 中的 origin 属性已弃用

UserRepresentation 中的 origin 属性已弃用,并计划在未来版本中删除。

相反,最好使用 federationLink 属性来获取与用户链接的提供者。

升级

在升级之前,请参阅 迁移指南 以获取更改的完整列表。

所有已解决的问题

已弃用功能

新功能

增强功能

错误