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 发行版提供了一个内置的 vault 提供程序,该提供程序从密钥库支持的 Elytron 凭据存储中读取密钥。由于这不再可用,我们添加了一个名为 Keycloak KeyStore Vault 的 Keycloak Vault SPI 的新实现。顾名思义,此实现从 Java 密钥库文件中读取密钥。然后,可以在管理控制台的多个位置中使用这些密钥。有关更多详细信息,请参阅我们的指南和最新的文档

添加了 KeyStore 配置源

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

主机名调试工具

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

Passthrough 代理模式更改

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

导出和导入执行自动构建

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

管理控制台

移除账户控制台 v1

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

账户控制台 v3 晋升为预览版

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

账户控制台模板变量已移除

暴露给账户控制台 V2 和 V3 模板的两个变量(isEventsEnabledisTotpConfigured)未被使用,并且已在本版本中移除。

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

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

管理控制台(以及即将推出的新账户控制台)在解析国际化消息的键方面的工作方式与 Keycloak 的其余部分略有不同。这是因为管理控制台使用了 i18next 库进行国际化。因此,在“Realm Settings”(域设置)➡ “Localization”(本地化)下为管理控制台定义自定义消息时,必须考虑 i18next 的最佳实践。具体而言,在为管理控制台定义消息时,重要的是在消息的键中指定一个命名空间

例如,假设我们要覆盖在新域创建时向用户显示的welcome 消息。此消息位于 dashboard 命名空间中,与保存消息的原始文件的名称相同 (dashboard.json)。如果我们想覆盖此消息,我们将必须使用命名空间作为前缀,后跟消息的键,并用冒号分隔,在本例中它将变为 dashboard:welcome

JavaScript 适配器

已移除旧版 Promise API

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

需要使用 new 运算符实例化

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

Admin API

重命名 Admin 库工件

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

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

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

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

Operator

k8s.keycloak.org/v2alpha1 变更

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

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

Operator 资源的协同管理

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

身份代理

OpenID Connect 身份提供程序中的必要声明配置

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

该选项默认禁用;启用后,您可以指定要筛选的 JWT 令牌声明的名称和要匹配的值(支持正则表达式格式)。

OpenID Connect 提供程序中对 JWE 加密 ID 令牌和 UserInfo 响应的支持

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

硬编码组映射器

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

用户会话注释映射器

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

LDAP 联合

已移除仅 LDAPS 的 Truststore 选项

已移除用于 truststore SPI 的 LDAP 选项 Only for ldaps。此参数用于为 TLS 安全的 LDAP 连接选择 truststore:可以选择内部 Keycloak truststore(Always),也可以选择全局 JVM truststore(Never)。

使用 Only for ldaps 的部署将自动表现得好像为 TLS 安全的 LDAP 连接选择了 Always 选项。

已移除 Openshift 集成功能

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

升级

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

所有已解决的问题

新功能

增强

Bug 修复