2023 年 7 月 11 日
要下载发行版,请访问 Keycloak 下载。
不再支持使用 Java 11 运行 Keycloak 服务器。Java 11 在 Keycloak 21 中被弃用,并宣布计划在 Keycloak 22 中删除。
Keycloak 升级到 Quarkus Java 框架的 3.2.0.Final 版本。Quarkus 3.x 继续推动 Java 开发的传统,通过快速移动并使用最新技术提供尖端的用户体验。
作为升级到 Quarkus 3.x 的一部分,Keycloak 将其代码库从 Java EE(企业版)迁移到其继任者 Jakarta EE,这带来了各种变化进入 Keycloak。我们已经升级了所有 Jakarta EE 规范以支持 Jakarta EE 10。
为了提供更好的运行时并尽可能地利用底层堆栈,使用 javax.ws.rs.core.Context
注释的所有上下文数据的注入点都被删除了。性能的预期改进包括不再在请求生命周期中多次创建代理实例,以及大幅减少运行时的反射代码量。
Keycloak 现在得益于升级到 Hibernate ORM 6.2,其中包括改进的性能、更好的 SQL、现代 JDK 支持以及对现代 RDBMS 功能的支持。
关于 KeyStore Vault 的消息,我们还集成了 Quarkus 最近发布的功能,称为 KeyStore 配置源。这意味着,除了已经存在的配置源(CLI 参数、环境变量和文件)之外,您现在可以通过存储在 Java 密钥库文件中的配置属性来配置您的 Keycloak 服务器。您可以在 配置指南 中了解有关此功能的更多信息。
由于许多用户在正确配置服务器主机名方面遇到了问题,现在有一个新的辅助工具来帮助调试配置。
使用 Keycloak 的 --proxy
配置设置和模式为 直通 的安装应查看文档,因为此模式的行为已更改。
在以前的版本中,export
和 import
命令需要首先运行 build
命令。从本版本开始,如果构建时配置已更改,export
和 import
命令将自动重新构建 Keycloak。
旧的帐户控制台 (v1) 现在已完全删除。此版本的帐户控制台在 Keycloak 12 中被标记为已弃用。
在 Keycloak 的 21.1.0 版本中,新的帐户控制台 (版本 3) 作为实验性功能引入。从本版本开始,它已被提升为预览功能。
公开给帐户控制台 V2 和 V3 模板的两个变量 (isEventsEnabled
和 isTotpConfigured
) 未被使用,已在本版本中删除。
如果开发人员扩展了帐户控制台主题,则他或她可能会使用这些变量。因此,如果您正在扩展基本主题,请确保不再使用这些变量。
管理控制台(以及很快也将发布的新帐户控制台)在解析国际化消息的键方面的工作方式略有不同于 Keycloak 的其他部分。这是因为它使用 i18next 库进行国际化。因此,在“领域设置”➡“本地化”下为管理控制台定义自定义消息时,必须考虑 i18next 的最佳实践。具体来说,在为管理控制台定义消息时,在消息键中指定 命名空间 非常重要。
例如,假设我们想要覆盖为用户显示的新领域已创建时显示的 welcome
消息。此消息位于 dashboard
命名空间中,与包含消息的原始文件 (dashboard.json
) 的名称相同。如果我们想要覆盖此消息,我们将不得不使用命名空间作为前缀,后跟冒号分隔的消息键,在这种情况下,它将变为 dashboard:welcome
。
在本版本中,我们从 Keycloak JS 适配器中删除了旧的 Promise API 方法。这意味着在适配器返回的 promise 上调用 .success()
和 .error()
将不再可能。
new
运算符实例化在以前的版本中,当 Keycloak JS 适配器在没有 new
运算符的情况下构造时,我们开始主动记录弃用警告。从本版本开始,这样做将改为抛出异常。这样做是为了与 JavaScript 类 的预期行为保持一致,这将允许将来进一步重构适配器。
升级到 Jakarta EE 后,Keycloak 管理客户端的工件被重命名为更具描述性的名称,并考虑了长期可维护性。我们仍然提供两个单独的 Keycloak 管理客户端,一个具有 Jakarta EE 支持,另一个具有 Java EE 支持。
用户 API 现在支持根据自定义属性查询用户数量。为此,在 /{realm}/users/count
端点中添加了一个新的 q
参数。
q
参数期望以下格式 q=<name>:<value> <name>:<value>
。其中 <name>
和 <value>
分别代表属性名称和值。
keycloak.status 中提供了其他字段,以方便 keycloak 成为可扩展资源。还有一些其他字段使状态更易于解释,例如 observedGeneration 和 condition observedGeneration 和 lastTransitionTime 字段。
condition 状态字段已从布尔值更改为字符串,以符合标准 Kubernetes 条件。在 CRD 中,它将暂时表示为接受任何内容,但它将始终是一个字符串。请确保您对该字段的任何使用都更新为期望值“True”、“False”或“Unknown”,而不是 true 或 false。
在需要高级管理的情况下,您现在可以直接更新运营商管理资源上大多数未由运营商直接设置的字段。这可以用作不受支持的 Keycloak 规范节的替代方案。与不受支持的节一样,这些直接修改不被认为是受支持的。如果您的修改阻止运营商管理资源,Keycloak CR 将显示此错误条件,并且运营商将记录它。
OpenID Connect 身份提供者支持一种新的配置,用于指定身份提供者发出的 ID 令牌必须具有特定声明,否则用户无法通过此代理进行身份验证。
该选项默认情况下处于禁用状态;启用它后,您可以指定要过滤的 JWT 令牌声明的名称以及要匹配的值(支持正则表达式格式)。
OpenID Connect 提供程序现在支持 Json Web Encryption (JWE) 用于 ID 令牌和用户信息响应。提供程序使用为所选加密算法定义的领域密钥来执行解密。
新的硬编码组映射器允许将特定组添加到从身份提供者代理的用户。
新的用户会话注释映射器允许将声明映射到用户会话注释。
用于使用信任库 SPI 的 LDAP 选项 仅适用于 ldaps
已被删除。此参数用于为 TLS 安全的 LDAP 连接选择信任库:选择内部 Keycloak 信任库 (始终
),或选择全局 JVM 信任库 (从不
)。
使用 仅适用于 ldaps
的部署将自动表现得好像为 TLS 安全的 LDAP 连接选择了 始终
选项。
允许使用 Keycloak 替换 OpenShift 3.x 中的内部 IdP 的 openshift-integration
预览功能已从 Keycloak 代码库中删除到单独的扩展项目中。
在升级之前,请参阅 迁移指南,了解更改的完整列表。