Keycloak 22.0.0 发布

2023 年 7 月 11 日

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

发行说明

服务器分发

已删除 Java 11 支持

不再支持使用 Java 11 运行 Keycloak 服务器。Java 11 在 Keycloak 21 中被弃用,并宣布计划在 Keycloak 22 中删除。

升级到 Quarkus 3.x

Keycloak 升级到 Quarkus Java 框架的 3.2.0.Final 版本。Quarkus 3.x 继续推动 Java 开发的传统,通过快速移动并使用最新技术提供尖端的用户体验。

从 Java EE 过渡到 Jakarta EE

作为升级到 Quarkus 3.x 的一部分,Keycloak 将其代码库从 Java EE(企业版)迁移到其继任者 Jakarta EE,这带来了各种变化进入 Keycloak。我们已经升级了所有 Jakarta EE 规范以支持 Jakarta EE 10。

上下文和依赖注入不再启用到 JAX-RS 资源

为了提供更好的运行时并尽可能地利用底层堆栈,使用 javax.ws.rs.core.Context 注释的所有上下文数据的注入点都被删除了。性能的预期改进包括不再在请求生命周期中多次创建代理实例,以及大幅减少运行时的反射代码量。

升级到 Hibernate ORM 6

Keycloak 现在得益于升级到 Hibernate ORM 6.2,其中包括改进的性能、更好的 SQL、现代 JDK 支持以及对现代 RDBMS 功能的支持。

Elytron 凭据存储替换

之前(现在已删除)的 WildFly 分发提供了一个内置的保管库提供程序,它从基于密钥库的 Elytron 凭据存储中读取机密。由于这不再可用,我们添加了一个名为 Keycloak KeyStore Vault 的 Keycloak Vault SPI 新实现。顾名思义,此实现从 Java 密钥库文件读取机密。然后,这些机密可以在管理控制台的多个位置使用。有关更多详细信息,请参阅 我们的指南 和最新的 文档

添加了 KeyStore 配置源

关于 KeyStore Vault 的消息,我们还集成了 Quarkus 最近发布的功能,称为 KeyStore 配置源。这意味着,除了已经存在的配置源(CLI 参数、环境变量和文件)之外,您现在可以通过存储在 Java 密钥库文件中的配置属性来配置您的 Keycloak 服务器。您可以在 配置指南 中了解有关此功能的更多信息。

主机名调试工具

由于许多用户在正确配置服务器主机名方面遇到了问题,现在有一个新的辅助工具来帮助调试配置。

直通代理模式更改

使用 Keycloak 的 --proxy 配置设置和模式为 直通 的安装应查看文档,因为此模式的行为已更改。

导出和导入执行自动构建

在以前的版本中,exportimport 命令需要首先运行 build 命令。从本版本开始,如果构建时配置已更改,exportimport 命令将自动重新构建 Keycloak。

管理控制台

删除帐户控制台 v1

旧的帐户控制台 (v1) 现在已完全删除。此版本的帐户控制台在 Keycloak 12 中被标记为已弃用。

帐户控制台 v3 提升为预览版

在 Keycloak 的 21.1.0 版本中,新的帐户控制台 (版本 3) 作为实验性功能引入。从本版本开始,它已被提升为预览功能。

删除帐户控制台模板变量

公开给帐户控制台 V2 和 V3 模板的两个变量 (isEventsEnabledisTotpConfigured) 未被使用,已在本版本中删除。

如果开发人员扩展了帐户控制台主题,则他或她可能会使用这些变量。因此,如果您正在扩展基本主题,请确保不再使用这些变量。

自定义管理控制台消息的更改

管理控制台(以及很快也将发布的新帐户控制台)在解析国际化消息的键方面的工作方式略有不同于 Keycloak 的其他部分。这是因为它使用 i18next 库进行国际化。因此,在“领域设置”➡“本地化”下为管理控制台定义自定义消息时,必须考虑 i18next 的最佳实践。具体来说,在为管理控制台定义消息时,在消息键中指定 命名空间 非常重要。

例如,假设我们想要覆盖为用户显示的新领域已创建时显示的 welcome 消息。此消息位于 dashboard 命名空间中,与包含消息的原始文件 (dashboard.json) 的名称相同。如果我们想要覆盖此消息,我们将不得不使用命名空间作为前缀,后跟冒号分隔的消息键,在这种情况下,它将变为 dashboard:welcome

JavaScript 适配器

删除旧的 Promise API

在本版本中,我们从 Keycloak JS 适配器中删除了旧的 Promise API 方法。这意味着在适配器返回的 promise 上调用 .success().error() 将不再可能。

需要使用 new 运算符实例化

在以前的版本中,当 Keycloak JS 适配器在没有 new 运算符的情况下构造时,我们开始主动记录弃用警告。从本版本开始,这样做将改为抛出异常。这样做是为了与 JavaScript 类 的预期行为保持一致,这将允许将来进一步重构适配器。

管理 API

重命名管理库工件

升级到 Jakarta EE 后,Keycloak 管理客户端的工件被重命名为更具描述性的名称,并考虑了长期可维护性。我们仍然提供两个单独的 Keycloak 管理客户端,一个具有 Jakarta EE 支持,另一个具有 Java EE 支持。

支持基于自定义属性统计用户

用户 API 现在支持根据自定义属性查询用户数量。为此,在 /{realm}/users/count 端点中添加了一个新的 q 参数。

q 参数期望以下格式 q=<name>:<value> <name>:<value>。其中 <name><value> 分别代表属性名称和值。

运算符

k8s.keycloak.org/v2alpha1 更改

keycloak.status 中提供了其他字段,以方便 keycloak 成为可扩展资源。还有一些其他字段使状态更易于解释,例如 observedGeneration 和 condition observedGeneration 和 lastTransitionTime 字段。

condition 状态字段已从布尔值更改为字符串,以符合标准 Kubernetes 条件。在 CRD 中,它将暂时表示为接受任何内容,但它将始终是一个字符串。请确保您对该字段的任何使用都更新为期望值“True”、“False”或“Unknown”,而不是 true 或 false。

运营商资源的联合管理

在需要高级管理的情况下,您现在可以直接更新运营商管理资源上大多数未由运营商直接设置的字段。这可以用作不受支持的 Keycloak 规范节的替代方案。与不受支持的节一样,这些直接修改不被认为是受支持的。如果您的修改阻止运营商管理资源,Keycloak CR 将显示此错误条件,并且运营商将记录它。

身份代理

OpenID Connect 身份提供者中的基本声明配置

OpenID Connect 身份提供者支持一种新的配置,用于指定身份提供者发出的 ID 令牌必须具有特定声明,否则用户无法通过此代理进行身份验证。

该选项默认情况下处于禁用状态;启用它后,您可以指定要过滤的 JWT 令牌声明的名称以及要匹配的值(支持正则表达式格式)。

支持 OpenID Connect 提供程序中的 JWE 加密 ID 令牌和用户信息响应

OpenID Connect 提供程序现在支持 Json Web Encryption (JWE) 用于 ID 令牌和用户信息响应。提供程序使用为所选加密算法定义的领域密钥来执行解密。

硬编码组映射器

新的硬编码组映射器允许将特定组添加到从身份提供者代理的用户。

用户会话注释映射器

新的用户会话注释映射器允许将声明映射到用户会话注释。

LDAP 联合

删除了仅 LDAPS 的信任库选项

用于使用信任库 SPI 的 LDAP 选项 仅适用于 ldaps 已被删除。此参数用于为 TLS 安全的 LDAP 连接选择信任库:选择内部 Keycloak 信任库 (始终),或选择全局 JVM 信任库 (从不)。

使用 仅适用于 ldaps 的部署将自动表现得好像为 TLS 安全的 LDAP 连接选择了 始终 选项。

删除了 OpenShift 集成功能

允许使用 Keycloak 替换 OpenShift 3.x 中的内部 IdP 的 openshift-integration 预览功能已从 Keycloak 代码库中删除到单独的扩展项目中。

升级

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

所有已解决的问题

新功能

增强功能

错误