bin/kc.sh build --features=persistent-user-session ...
2024年6月10日
要下载此版本,请访问 Keycloak 下载页面。
Account Console v2 主题已从 Keycloak 中移除。此主题在 Keycloak 24 中已被弃用,并由 Account Console v3 主题取代。如果您仍在使用此主题,则应迁移到 Account Console v3 主题。
Keycloak 现在支持 OpenJDK 21,因为我们希望坚持使用最新的 LTS OpenJDK 版本。
OpenJDK 17 支持在 Keycloak 中已弃用,并将在后续版本中移除,转而支持 OpenJDK 21。
如先前 Keycloak 版本的发行说明中所述,大多数 Java 适配器现已从 Keycloak 代码库和下载页面中移除。
对于 OAuth 2.0/OIDC,这包括移除 Tomcat 适配器、WildFly/EAP 适配器、Servlet Filter 适配器、KeycloakInstalled
桌面适配器、jaxrs-oauth-client
适配器、JAAS 登录模块、Spring 适配器和 SpringBoot 适配器。您可以查看 我们之前的文章,了解一些替代方案列表。
对于 SAML,这包括移除 Tomcat 适配器和 Servlet filter 适配器。WildFly 和 JBoss EAP 仍支持 SAML 适配器。
通用授权客户端库仍然受支持,我们仍计划继续支持它。它的目标是与任何其他 OAuth 2.0 或 OpenID Connect 库结合使用。您可以查看 快速入门,了解一些将此授权客户端库与 Elytron OIDC 或 SpringBoot 等第三方 Java 适配器一起使用的示例。您还可以查看快速入门,了解与 WildFly 一起使用的 SAML 适配器示例。
在 Keycloak 24 中,欢迎页面已更新为使用 PatternFly 5,这是 Keycloak 用户界面基础设计系统的最新版本。在此版本中,管理控制台和账户控制台也已更新为使用 PatternFly 5。如果您想扩展和自定义管理控制台和账户控制台,请查看 PatternFly 5 中的更改,并相应地更新您的自定义设置。
Argon2 现在是 Keycloak 在非 FIPS 环境中使用的默认密码哈希算法。
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,以获得更好的堆利用率。
为了解决先前主机名配置设置的复杂性和缺乏直观性的问题,我们很自豪地推出 Hostname v2 选项。
我们听取了您的反馈,解决了棘手的问题,并创建了更流畅的主机名配置管理体验。请注意,即使这些选项背后的行为也已更改,并且需要您注意 - 如果您正在处理自定义主机名设置。
Hostname v2 选项默认受支持,因为旧的主机名选项已弃用,并将在后续版本中移除。您应尽快迁移到这些选项。
新选项默认激活,因此 Keycloak 将无法识别旧选项。
有关如何迁移的信息,请参阅 升级指南。
以前版本的 Keycloak 仅将离线用户会话和离线客户端会话存储在数据库中。新功能 persistent-user-session
不仅将在线用户会话和在线客户端会话存储在内存中,还存储在数据库中。即使所有 Keycloak 实例都重新启动或升级,这也将允许用户保持登录状态。
此功能是一项预览功能,默认情况下处于禁用状态。要使用它,请将以下内容添加到您的构建命令中
bin/kc.sh build --features=persistent-user-session ...
有关如何升级的信息,请参阅 升级指南。
以下 cookies 过去未设置 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 规范严格要求。
声明 sub
和 auth_time
现在由协议映射器添加,这些映射器在新的客户端作用域 basic
上默认配置,该作用域会自动添加到所有客户端。这些声明仍然像以前一样添加到 ID 令牌和访问令牌,但不添加到轻量级访问令牌。
声明 nonce
现在仅添加到 ID 令牌。它不会添加到常规访问令牌或轻量级访问令牌。为了向后兼容,您可以通过协议映射器将此声明添加到访问令牌,这需要显式配置。
声明 session_state
现在未添加到任何令牌。如果需要,仍然可以通过协议映射器添加它。规范仍然支持另一个专用声明 sid
,它在以前的版本中也可用,并且具有完全相同的值。
有关更多详细信息,请参阅 升级指南。
调用令牌自省端点时,可以使用 HTTP 标头 Accept: application/jwt
。当为特定客户端启用时,它会从令牌自省端点返回声明 jwt
,其中包含完整的 JWT 访问令牌,这对于客户端调用自省端点使用轻量级访问令牌的情况尤其有用。感谢 Thomas Darimont 的贡献。
Keycloak 支持新的密码策略,允许您拒绝包含用户用户名的用户密码。
在管理控制台中,您现在可以在特定领域的必需操作选项卡中配置一些必需操作。目前,更新密码是唯一内置的可配置必需操作。它支持设置最大身份验证年龄,这是用户可以通过 kc_action
参数(例如,在账户控制台中更新密码时使用)更新其密码的最大时间,而无需重新身份验证。必需操作的排序也得到了改进。当身份验证期间存在多个必需操作时,所有操作将一起排序,无论这些操作是在身份验证期间设置的(例如,通过 kc_action
参数)还是由管理员手动添加到用户帐户的操作。感谢 Thomas Darimont 和 Daniel Fesenmeyer 的贡献。
添加了对 Passkeys 条件 UI 的支持。当启用 Passkeys 预览功能时,会有一个专用的身份验证器可用,这意味着您可以从可用 Passkeys 帐户列表中选择,并基于该帐户对用户进行身份验证。感谢 Takashi Norimatsu 的贡献。
添加了用于保护 SAML 客户端的默认客户端配置文件。在管理控制台中浏览领域的客户端策略时,您会看到一个新的客户端配置文件 saml-security-profile
。使用它时,将对 SAML 客户端应用安全最佳实践,例如强制签名、禁用 SAML 重定向绑定以及禁止通配符重定向 URL。
正在进行对 OpenID 可验证凭据颁发 (OID4VCI) 支持的工作。目前,这仍在进行中,但正在逐步添加内容。Keycloak 可以充当 OID4VC 颁发者,并支持预授权代码流。支持 JWT-VC、SD-JWT-VC 和 VCDM 格式的可验证凭据。感谢 OAuth SIG 小组的成员的贡献和反馈,尤其感谢 Stefan Wiedemann、Francis Pouatcha、Takashi Norimatsu 和 Yutaka Obuchi。
按用户属性搜索用户时,Keycloak 不再强制使用小写比较来搜索用户属性名称。此更改的目标是通过使用 Keycloak 在用户属性表上的本机索引来加速搜索。如果您的数据库排序规则不区分大小写,则您的搜索结果将保持不变。如果您的数据库排序规则区分大小写,您可能会看到比以前更少的搜索结果。
对于 keycloak-authz-client
库的用户,调用 AuthorizationResource.getPermissions(…)
现在正确返回 List<Permission>
。
以前,即使方法声明声明了 List<Permission>
,它也会在运行时返回 List<Map>
。
此修复程序将破坏依赖于将 List 或其内容强制转换为 List<Map>
的代码。如果您在任何情况下使用过此方法,您很可能这样做过并且会受到影响。
导出客户端的授权设置时,不再设置资源、作用域和策略的 ID。因此,您现在可以将一个客户端的设置导入到另一个客户端。
指标和健康检查端点不再通过标准 Keycloak 服务器端口访问。由于这些端点应从外部世界隐藏,因此可以在单独的默认管理端口 9000
上访问它们。
它允许不将其作为 Kubernetes 环境中的标准 Keycloak 端点向用户公开。新的管理界面提供了一组新的选项,并且是完全可配置的。
Keycloak Operator 假定管理界面默认处于启用状态。有关更多详细信息,请参阅 配置管理界面。
Keycloak 现在支持用于远程日志记录的 Syslog 协议。它利用 RFC 5424 中定义的协议。默认情况下,syslog 处理程序处于禁用状态,但启用后,它会将所有日志事件发送到远程 syslog 服务器。
有关更多信息,请参阅 配置日志记录 指南。
方法 EnvironmentDependentProviderFactory.isSupported()
已弃用多个版本,现在已被移除。
有关更多详细信息,请参阅 升级指南。
现在可以在运行时指定 cache
、cache-stack
和 cache-config-file
选项。这消除了由于它们而执行构建阶段和重建映像的需要。
有关更多详细信息,请参阅 升级指南。
高可用性指南现在包含有关如何配置 AWS Lambda 以防止从备份站点到主站点的预期自动故障恢复的指南。
在此版本中,我们最终从以下类中移除了已弃用的方法
AccessToken
IDToken
JsonWebToken
有关更多详细信息,请参阅 升级指南。
由于从 AccessToken
、IDToken
和 JsonWebToken
中移除了已弃用的方法,SingleUseObjectKeyModel
也发生了更改,以保持与到期值相关的方法名称的一致性。
有关更多详细信息,请参阅 升级指南。
受支持和测试的数据库现在包括 PostgreSQL 16。
在此版本中,我们以技术预览功能的形式交付 Keycloak 组织。
此功能为领域提供了一些核心 CIAM 功能,这将作为未来更多功能的基础,以解决企业对企业 (B2B) 和企业对企业对客户 (B2B2C) 用例。
在功能方面,该功能已完成。但是,我们仍需努力使其在下一个主要版本中获得完全支持。剩余的工作主要是为生产部署准备该功能,重点是可伸缩性。此外,根据我们在下一个主要版本之前收到的反馈,我们最终可能会接受其他功能并为该功能增加更多价值,而不会影响其路线图。
有关更多详细信息,请参阅 服务器管理指南。
在升级之前,请参阅 迁移指南,获取完整的更改列表。