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 Global Accelerator,因为这避免了客户端 DNS 缓存导致的长时间故障转移。

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

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

管理引导和恢复

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

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

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

OpenTelemetry 追踪预览

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

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

用于可验证凭据颁发的 OpenID

用于可验证凭据颁发 (OID4VCI) 的 OpenID 仍然是 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 小时(一小时)。

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

可以设置 --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 Ephemeral Static (ECDH-ES) 规范的密钥协商为 JWT 引入了三个新的标头参数:epkapuapv。目前,Keycloak 实现仅管理强制性的 epk,而其他两个(可选)永远不会添加到标头中。有关这些算法的更多信息,请参阅JSON Web 算法 (JWA)

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

非常感谢 Justin Tay 的贡献。

支持领域中社交经纪人的多个实例

现在可以在一个领域中拥有同一社交经纪人的多个实例。

大多数情况下,一个领域不需要同一社交经纪人的多个实例。但是,由于引入了 organization 功能,应该可以将同一社交经纪人的不同实例链接到不同的组织。

创建社交经纪人时,您现在应该像任何其他经纪人一样提供 别名,并可选择提供 显示名称

凭据的新通用事件类型

现在有用于更新 (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 领域导入

配置 LDAP 连接池

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

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

Infinispan marshalling 更改为 Infinispan Protostream

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

警告
JBoss Marshalling 和 Infinispan Protostream 彼此不兼容,不正确的使用可能会导致数据丢失。因此,升级到此版本时,所有缓存都将被清除。

Infinispan Protostream 基于 Protocol Buffers (proto 3),它具有向后/向前兼容性的优势。

删除 OSGi 元数据

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

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

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

身份提供程序不再从领域表示中提供

作为改进领域和组织在拥有许多身份提供程序时的可伸缩性的一部分,领域表示不再保留身份提供程序的列表。但是,在导出领域时,它们仍然可以从领域表示中获得。

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

保护应用程序文档已转换为指南格式

保护应用程序和服务文档已转换为类似于先前版本中转换的服务器安装和配置文档的新格式。该文档现在可在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 属性来获取用户链接到的提供程序。

升级

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

所有已解决的问题

已弃用的功能

新功能

增强功能

错误