Keycloak 25.0.0 发布

2024 年 6 月 10 日

要下载此版本,请访问 Keycloak 下载页面.

亮点

帐户控制台 v2 主题已移除

帐户控制台 v2 主题已从 Keycloak 中移除。此主题已在 Keycloak 24 中弃用,并被帐户控制台 v3 主题取代。如果您仍在使用此主题,则应迁移到帐户控制台 v3 主题。

支持 Java 21

Keycloak 现在支持 OpenJDK 21,因为我们希望坚持使用最新的 LTS OpenJDK 版本。

Java 17 支持已弃用

OpenJDK 17 支持已在 Keycloak 中弃用,并将从后续版本中移除,以支持 OpenJDK 21。

大多数 Java 适配器已移除

如先前 Keycloak 版本的发行说明中所述,大多数 Java 适配器现已从 Keycloak 代码库和下载页面中移除。

对于 OAuth 2.0/OIDC,这包括移除 Tomcat 适配器、WildFly/EAP 适配器、Servlet 过滤器适配器、KeycloakInstalled 桌面适配器、jaxrs-oauth-client 适配器、JAAS 登录模块、Spring 适配器和 SpringBoot 适配器。您可以查看 我们的旧文章 以了解一些替代方案的列表。

对于 SAML,这包括移除 Tomcat 适配器和 Servlet 过滤器适配器。SAML 适配器仍支持 WildFly 和 JBoss EAP。

通用的授权客户端库仍然受支持,我们仍然计划支持它。它旨在与其他 OAuth 2.0 或 OpenID Connect 库结合使用。您可以查看 快速入门 以了解此授权客户端库与 Elytron OIDC 或 SpringBoot 等第三方 Java 适配器一起使用的一些示例。您也可以查看快速入门以了解使用 WildFly 的 SAML 适配器示例。

升级到 PatternFly 5

在 Keycloak 24 中,欢迎页面已更新为使用 PatternFly 5,这是支持 Keycloak 用户界面的设计系统的最新版本。在此版本中,管理控制台和帐户控制台也已更新为使用 PatternFly 5。如果您想扩展和自定义管理控制台和帐户控制台,请查看 PatternFly 5 中的变化 并相应地更新您的自定义项。

Argon2 密码哈希

在非 FIPS 环境中,Argon2 现已成为 Keycloak 使用的默认密码哈希算法。

Argon2 是 2015 年密码哈希竞赛 的获胜者,并且是 OWASP 推荐的哈希算法。

在 Keycloak 24 中,PBKDF2 的默认哈希迭代次数已从 27.5K 增加到 210K,导致生成密码哈希所需的 CPU 时间增加了 10 倍以上。使用 Argon2 可以实现更好的安全性,并且 CPU 时间几乎与 Keycloak 的先前版本相同。一个缺点是 Argon2 需要更多内存,这是抵抗 GPU 攻击的必要条件。Keycloak 中 Argon2 的默认设置每个哈希请求需要 7MB 的内存。为了防止过度使用内存和 CPU,Argon2 默认情况下将并行计算哈希的次数限制为 JVM 可用的核心数。为了支持 Argon2 的内存密集型特性,我们已将默认 GC 从 ParallelGC 更新为 G1GC,以更好地利用堆。

新的主机名选项

为了解决先前主机名配置设置的复杂性和缺乏直观性,我们很荣幸地推出主机名 v2 选项。

我们已听取您的反馈,解决了一些棘手的问题,并为管理主机名配置创建了更流畅的体验。请注意,即使这些选项背后的行为也已更改,并且需要您关注 - 如果您正在处理自定义主机名设置。

主机名 v2 选项默认情况下受支持,因为旧的主机名选项已弃用,并将从后续版本中移除。您应尽快迁移到它们。

新的选项默认情况下处于激活状态,因此 Keycloak 不会识别旧的选项。

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

持久用户会话

先前版本的 Keycloak 仅在数据库中存储离线用户和离线客户端会话。新功能 persistent-user-session 不仅在内存中存储在线用户会话和在线客户端会话,还存储在数据库中。这将允许用户即使 Keycloak 的所有实例都重新启动或升级,也能保持登录状态。

此功能是预览功能,默认情况下处于禁用状态。要使用它,请将以下内容添加到您的构建命令中

bin/kc.sh build --features=persistent-user-session ...

有关更多详细信息,请参见 启用和禁用功能 指南。大小调整指南 包含一个新段落,描述了启用此功能时更新的资源要求。

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

Cookie 更新

为所有 Cookie 设置 SameSite 属性

以下 Cookie 以前没有设置 SameSite 属性,在最近的浏览器版本中,会导致它们默认设置为 SameSite=Lax

  • KC_STATE_CHECKER 现在设置为 SameSite=Strict

  • KC_RESTART 现在设置为 SameSite=None

  • KEYCLOAK_LOCALE 现在设置为 SameSite=None

  • KEYCLOAK_REMEMBER_ME 现在设置为 SameSite=None

默认值 SameSite=Lax 会导致 POST 基于绑定的问题,主要适用于 SAML,但也用于一些 OpenID Connect / OAuth 2.0 流程。

Cookie KC_AUTH_STATE 已移除,并且不再由 Keycloak 服务器设置,因为该服务器不再需要此 Cookie。

以下用于设置自定义 Cookie 的 API 已移除

  • ServerCookie - 由 NewCookie.Builder 取代

  • LocaleSelectorProvider.KEYCLOAK_LOCALE - 由 CookieType.LOCALE 取代

  • HttpCookie - 由 NewCookie.Builder 取代

  • HttpResponse.setCookieIfAbsent(HttpCookie cookie) - 由 HttpResponse.setCookieIfAbsent(NewCookie cookie) 取代

解决已过期身份验证会话的“您已登录”问题

Keycloak 23 版本提供了当用户在多个浏览器选项卡中并行进行身份验证时的改进。但是,此改进没有解决身份验证会话过期的情况。现在,对于用户已在一个浏览器选项卡中登录且身份验证会话在其他浏览器选项卡中过期的这种情况,Keycloak 能够将用户重定向回客户端应用程序,并显示 OIDC/SAML 错误,以便客户端应用程序可以立即重试身份验证,这通常会由于 SSO 会话而自动登录应用程序。有关更多详细信息,请参见 服务器管理指南身份验证会话.

轻量级访问令牌变得更加轻量级

在先前版本中,添加了对轻量级访问令牌的支持。在此版本中,我们设法从轻量级访问令牌中删除了更多内置声明。这些声明由协议映射器添加。其中一些声明甚至影响常规访问令牌或 ID 令牌,因为它们不是 OIDC 规范严格要求的。

  • 声明 subauth_time 现在由协议映射器添加,这些协议映射器默认情况下配置在新的客户端范围 basic 上,该范围会自动添加到所有客户端。这些声明仍然像以前一样添加到 ID 令牌和访问令牌,但不添加到轻量级访问令牌。

  • 声明 nonce 现在仅添加到 ID 令牌。它不会添加到常规访问令牌或轻量级访问令牌。为了向后兼容,您可以通过协议映射器将此声明添加到访问令牌,这需要显式配置。

  • 声明 session_state 现在不会添加到任何令牌。如果需要,仍然可以通过协议映射器添加它。规范仍然支持其他专用声明 sid,该声明在先前版本中也可用,并且具有完全相同的值。

有关更多详细信息,请参见 升级指南.

支持令牌自省端点的 application/jwt 媒体类型

您可以在调用令牌自省端点时使用 HTTP 标头 Accept: application/jwt。当为特定客户端启用时,它会从令牌自省端点返回一个带有完整 JWT 访问令牌的声明 jwt,这在客户端调用自省端点时使用轻量级访问令牌的情况下特别有用。感谢 Thomas Darimont 的贡献。

密码策略检查密码是否包含用户名

Keycloak 支持新的密码策略,允许您拒绝包含用户用户名在内的用户密码。

必需操作改进

在管理控制台中,您现在可以在特定领域的“必需操作”选项卡中配置一些必需操作。目前,更新密码是唯一内置的可配置必需操作。它支持设置身份验证的最大有效期,这是用户在无需重新身份验证的情况下通过 kc_action 参数(例如在更新帐户控制台中的密码时使用)更新密码的最大时间。必需操作的排序也得到了改进。当身份验证期间存在多个必需操作时,所有操作将一起排序,无论这些操作是在身份验证期间设置的操作(例如通过 kc_action 参数)还是由管理员手动添加到用户帐户的操作。感谢 Thomas DarimontDaniel Fesenmeyer 的贡献。

密钥改进

添加了对密钥条件 UI 的支持。当启用密钥预览功能时,将提供一个专用的身份验证器,这意味着您可以从可用密钥帐户列表中选择并基于该帐户对用户进行身份验证。感谢 Takashi Norimatsu 的贡献。

用于 SAML 的默认客户端配置文件

添加了默认客户端配置文件以拥有安全的 SAML 客户端。在管理控制台中浏览领域的客户端策略时,您会看到一个新的客户端配置文件 saml-security-profile。当使用它时,将对 SAML 客户端应用安全最佳实践,例如强制执行签名,禁用 SAML 重定向绑定,并禁止通配符重定向 URL。

添加了一个新的身份验证器 Confirm override existing link。此身份验证器允许您覆盖与 Keycloak 用户关联的 IDP 用户名,该用户名以前已与其他 IDP 标识关联。有关更多详细信息,请参见 服务器管理指南。感谢 Lex Cao 的贡献。

用于可验证凭证签发的 OpenID - 实验性支持

OpenID 用于可验证凭证签发 (OID4VCI) 的支持正在开发中。目前,这仍在开发中,但功能正在逐步添加。Keycloak 可以充当支持预授权代码流的 OID4VC 签发者。支持 JWT-VC、SD-JWT-VC 和 VCDM 格式的可验证凭证。感谢 OAuth SIG 小组成员的贡献和反馈,特别感谢 Stefan WiedemannFrancis PouatchaTakashi NorimatsuYutaka Obuchi

不再区分大小写地按用户属性搜索

当按用户属性搜索用户时,Keycloak 不再搜索用户属性名称并强制进行小写比较。此更改的目标是通过使用 Keycloak 对用户属性表中的本机索引来加速搜索。如果您的数据库排序规则不区分大小写,则您的搜索结果将保持不变。如果您的数据库排序规则区分大小写,您可能会看到比以前更少的搜索结果。

授权客户端库中的重大修复

对于 keycloak-authz-client 库的用户,调用 AuthorizationResource.getPermissions(…​) 现在会正确返回一个 List<Permission>

以前,它会在运行时返回一个 List<Map>,即使方法声明宣传 List<Permission>

此修复程序将破坏依赖于将 List 或其内容强制转换为 List<Map> 的代码。如果您以任何方式使用过此方法,您很可能已经执行了此操作并会受到影响。

导出客户端授权设置时不再设置 ID

导出客户端的授权设置时,不再为资源、范围和策略设置 ID。因此,您现在可以将设置从一个客户端导入到另一个客户端。

用于指标和健康端点的管理端口

指标和健康检查端点不再可以通过标准 Keycloak 服务器端口访问。由于这些端点应隐藏在外部世界中,因此可以通过单独的默认管理端口 9000 访问它们。

它允许在 Kubernetes 环境中不将它公开给用户作为标准 Keycloak 端点。新的管理界面提供了一组新的选项,并且可以完全配置。

Keycloak Operator 默认情况下假定管理界面已打开。有关更多详细信息,请参阅 配置管理界面

用于远程日志记录的 Syslog

Keycloak 现在支持 Syslog 协议用于远程日志记录。它利用 RFC 5424 中定义的协议。默认情况下,syslog 处理程序已禁用,但启用后,它会将所有日志事件发送到远程 syslog 服务器。

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

对类 EnvironmentDependentProviderFactory 的更改

方法 EnvironmentDependentProviderFactory.isSupported() 已被弃用多个版本,现在已被删除。

有关更多详细信息,请参阅 升级指南

所有 cache 选项均为运行时

现在可以在运行时指定 cachecache-stackcache-config-file 选项。这消除了由于它们而执行构建阶段并重新构建映像的需要。

有关更多详细信息,请参阅 升级指南

高可用性指南增强

高可用性指南现在包含有关如何配置 AWS Lambda 以防止从备份站点到主站点的预期自动回滚的指南。

AccessTokenIDTokenJsonWebToken 类中删除已弃用的方法

在此版本中,我们最终从以下类中删除了已弃用的方法

  • AccessToken

  • IDToken

  • JsonWebToken

有关更多详细信息,请参阅 升级指南

SingleUseObjectKeyModel 添加了方法 getExp

由于从 AccessTokenIDTokenJsonWebToken 中删除了已弃用的方法,因此 SingleUseObjectKeyModel 也发生了变化,以保持与与过期值相关的​​方法名称一致。

有关更多详细信息,请参阅 升级指南

支持 PostgreSQL 16

支持和经过测试的数据库现在包括 PostgreSQL 16。

引入对客户身份和访问管理 (CIAM) 和多租户的支持

在此版本中,我们提供 Keycloak Organizations 作为技术预览功能。

此功能提供一个具有某些核心 CIAM 功能的领域,它将作为将来解决企业对企业 (B2B) 和企业对企业对客户 (B2B2C) 使用案例的更多功能的基线。

在功能方面,该功能已完成。但是,我们还需要做一些工作才能使其在下一个主要版本中得到完全支持。这项剩余工作主要涉及为生产部署准备功能,重点是可扩展性。此外,根据我们在下一个主要版本发布之前收到的反馈,我们最终可能会接受其他功能并为该功能添加更多价值,而不会影响其路线图。

有关更多详细信息,请参阅 服务器管理指南

升级

升级之前,请参阅 迁移指南,了解更改的完整列表。

所有已解决的问题

新功能

增强功能

Bugs