Keycloak 26.1.0 发布

2025年1月15日

要下载此版本,请访问 Keycloak 下载

亮点

传输堆栈 jdbc-ping 作为新的默认设置

Keycloak 现在默认使用其数据库来发现同一集群的其他节点,这消除了对额外网络相关配置的需求,尤其对于云提供商而言。这也是一个默认设置,可以在云环境中开箱即用。

先前版本的 Keycloak 默认使用 UDP 多播来发现其他节点,以形成集群并同步 Keycloak 的复制缓存。这需要多播可用并正确配置,但这通常在云环境中不是这种情况。

从这个版本开始,默认设置更改为 jdbc-ping 配置,它使用 Keycloak 的数据库来发现其他节点。由于这消除了对多播网络功能和 UDP 的需求,并且不再使用动态端口进行基于 TCP 的故障检测,因此对于使用先前默认设置的环境来说,这是一个简化且即插即用的替代方案。要启用先前的行为,请选择现已弃用的传输堆栈 udp

Keycloak Operator 将继续配置 kubernetes 作为传输堆栈。

有关更多信息,请参阅 配置分布式缓存 指南。

为 Infinispan 和 JGroups 线程池启用虚拟线程

从本版本开始,当在 OpenJDK 21 上运行时,Keycloak 会自动在嵌入式 Infinispan 和 JGroups 中启用虚拟线程池支持。这消除了配置 JGroups 线程池、使 JGroups 线程池与 HTTP 工作线程池对齐的需求,并减少了整体内存占用。

支持 OpenTelemetry 追踪

在之前的版本中,OpenTelemetry 追踪功能是预览版,现在是完全支持的。这意味着 opentelemetry 功能默认启用。

Keycloak 的追踪功能进行了多项改进,例如:

  • 通过 Keycloak CR 进行配置 在 Keycloak Operator 中

  • 自定义 Span 用于:

    • 入站/出站 HTTP 请求,包括身份提供商代理

    • 数据库操作和连接

    • LDAP 请求

    • 耗时操作(密码哈希、持久会话操作等)

有关更多信息,请参阅 启用追踪 指南。

Infinispan 默认 XML 配置文件位置

如果未提供 --cache-config-file 选项,则之前的版本会忽略对 conf/cache-ispn.xml 的任何更改。

从本版本开始,当未设置 --cache-config-file 时,默认的 Infinispan XML 配置文件为 conf/cache-ispn.xml,因为这既是预期的行为,也是当前和先前版本的文档所暗示的行为。

用于特定类别日志级别的单独选项

现在可以设置特定类别的日志级别作为单独的 log-level-category 选项。

有关更多详细信息,请参阅 日志记录指南

用于可验证凭证颁发的 OpenID

用于可验证凭证颁发 (OID4VCI) 的 OpenID 在 Keycloak 中仍然是一项实验性功能,但在此版本中得到了很大的改进。此功能受益于对现有配置的大量优化,并使该功能更具动态性和可定制性。

您将在 Keycloak OAuth SIG 中找到重要的开发和讨论。欢迎 Keycloak 社区的任何人加入。

非常感谢 OAuth SIG 组的所有成员参与此功能的开发和讨论。特别感谢 Francis PouatchaIngrid KamgaPascal KnüppelThomas DarimontOgen BertrandAwambeng RodrickTakashi Norimatsu

客户端的最小 ACR 值

最小 ACR 值 选项已添加到 realm OIDC 客户端的配置选项中。此添加是与步进式身份验证相关的增强功能,它使在登录到特定客户端时可以强制执行最小 ACR 级别。

非常感谢 Simon Levermann 的贡献。

支持 prompt=create

现在支持 启动用户注册标准,它允许 OIDC 客户端使用参数 prompt=create 启动登录请求,以通知 Keycloak 应该注册新用户而不是验证现有用户。Keycloak 已经支持使用专用端点 /realms/<realm>/protocol/openid-connect/registrations 启动用户注册。但是,此端点现在已被弃用,转而使用标准方式,因为它是一个特定于 Keycloak 的专有解决方案。

非常感谢 Thomas Darimont 的贡献。

为生成的 EC 密钥创建证书的选项

EC-DSA 和 Ed-DSA 密钥提供程序现在有一个新选项 生成证书。当 realm 管理员创建生成的密钥时,可以为此密钥生成证书。证书信息可在管理控制台和此密钥的 JWK 表示中获得,JWK 表示可从 realm 密钥的 JWKS 端点获得。

非常感谢 Pascal Knüppel 的贡献。

授权码绑定到 DPoP 密钥

现在支持 授权码绑定到 DPoP 密钥,包括对带有推送授权请求的 DPoP 的支持。

非常感谢 Takashi Norimatsu 的贡献。

发送到 OIDC 身份验证请求的其他参数的最大计数和长度

OIDC 身份验证请求支持有限数量的最大长度的附加自定义参数。附加参数可用于自定义目的(例如,使用协议映射器将声明添加到令牌中)。在以前的版本中,参数的最大计数硬编码为 5,参数的最大长度硬编码为 2000。现在这两个值都是可配置的。此外,还可以配置附加参数是否会导致请求失败,或者是否忽略参数。

非常感谢 Manuel SchallarPatrick Weiner 的贡献。

网络策略支持添加到 Keycloak Operator

注意
预览功能。

为了提高 Kubernetes 部署的安全性,可以在 Keycloak CR 中指定 网络策略。Keycloak Operator 接受入口规则,这些规则定义了允许流量从何处进入,并自动创建必要的网络策略。

使用 Microsoft Active Directory 时,LDAP 用户默认创建为已启用

如果您使用 Microsoft AD 并通过管理界面创建用户,则用户默认创建为已启用。

在以前的版本中,只有在为用户设置(非临时)密码后才能更新用户状态。此行为与其他内置用户存储不一致,也与 LDAP 提供程序支持的其他 LDAP 供应商不一致。

新的条件验证器 条件 - 子流已执行条件 - 客户端 Scope

条件 - 子流已执行条件 - 客户端 Scope 是 Keycloak 中的新条件验证器。条件 条件 - 子流已执行 检查先前的子流在身份验证流执行期间是否已成功执行(或未执行)。条件 条件 - 客户端 Scope 检查配置的客户端 Scope 是否作为请求身份验证的客户端的客户端 Scope 存在。有关更多详细信息,请参阅 条件流中的条件

定义提供程序工厂之间的依赖关系

在为 Keycloak 开发扩展时,开发人员现在可以通过在 ProviderFactory 接口中实现 dependsOn() 方法来指定提供程序工厂类之间的依赖关系。有关详细描述,请参阅 Javadoc。

欢迎主题启用暗黑模式

我们现在为所有 keycloak 主题启用了暗黑模式支持。此功能以前存在于管理控制台、帐户控制台和登录中,现在也适用于欢迎页面。如果用户通过操作系统设置(例如,浅色或深色模式)或用户代理设置指示其偏好,则主题将自动遵循这些偏好。

如果您使用的是扩展任何 keycloak 主题的自定义主题,并且尚未准备好支持暗黑模式,或者存在阻止您实现暗黑模式的样式冲突,则可以通过将以下属性添加到您的主题来禁用支持

darkMode=false

或者,您可以通过关闭 realm 设置中 主题 选项卡下的 暗黑模式 设置,在每个 realm 的基础上禁用内置 Keycloak 主题的暗黑模式支持。

密码哈希的指标

现在有一个新的指标可用于计算 Keycloak 执行了多少次密码验证。这使您可以更好地评估 CPU 资源的使用位置,并可以用于您的容量计算。

有关更多详细信息,请参阅 Keycloak 指标用于调整 CPU 和内存资源大小的概念

管理控制台中的注销所有活动会话现在有效地删除所有会话

在以前的版本中,单击管理控制台中的 注销所有活动会话 只会导致删除常规会话。脱机会话仍会显示,尽管实际上已失效。

这种情况已得到更改。现在,当注销所有活动会话时,所有会话(常规会话和脱机会话)都将被删除。

Node.js 适配器和 JavaScript 适配器的专用发布周期

从本版本开始,Keycloak JavaScript 适配器和 Keycloak Node.js 适配器将具有独立于 Keycloak 服务器发布周期的发布周期。26.1.0 版本可能是这些适配器与 Keycloak 服务器一起发布的最后一个版本,但从现在开始,这些适配器可能会在与 Keycloak 服务器不同的时间发布。

快速入门中的更新

Keycloak 快速入门现在使用 main 作为基础分支。先前使用的 latest 分支已删除。main 分支依赖于 Keycloak 服务器、Keycloak 客户端库和适配器的最新发布版本。因此,对快速入门的贡献会立即对快速入门使用者可见,而无需等待下一个 Keycloak 服务器版本。

KEYCLOAK_SESSION Cookie 的格式已略微更新,以使其不包含任何纯文本的私有数据。到目前为止,Cookie 的格式为 realmName/userId/userSessionId。现在,Cookie 包含用户会话 ID,该 ID 通过 SHA-256 哈希并进行 URL 编码。

AUTH_SESSION_ID Cookie 的格式已更新,以包含 auth 会话 ID 的签名,以通过签名验证确保其完整性。新格式为 base64(auth_session_id.auth_session_id_signature)。通过此更新,旧格式将不再被接受,这意味着旧的 auth 会话将不再有效。此更改对用户会话没有影响。

如果您正在实现自己的提供程序并依赖于 Keycloak 内部 Cookie 的格式,则这些更改可能会影响您。

删除 robots.txt 文件

默认情况下先前包含的 robots.txt 文件现已删除。默认的 robots.txt 文件阻止了所有爬网,这阻止了 noindex/nofollow 指令被遵循。所需的默认行为是 Keycloak 页面不显示在搜索引擎结果中,这通过现有的 X-Robots-Tag 标头来实现,该标头默认设置为 none。如果需要不同的行为,可以按 realm 覆盖此标头的值。

如果您之前为此在反向代理配置中添加了规则,则现在可以将其删除。

导入的密钥提供程序检查并钝化具有过期证书的密钥

允许导入外部生成的密钥的密钥提供程序(rsajava-keystore 工厂)现在检查关联证书(如果存在)的有效性。因此,具有过期证书的密钥不再可以导入到 Keycloak 中。如果证书在运行时过期,则密钥将转换为被动密钥(已启用但未激活)。被动密钥不用于新令牌,但对于验证先前颁发的令牌仍然有效。

默认的 generated 密钥提供程序生成有效期为 10 年的证书(具有或可以具有关联证书的类型)。由于有效期长以及频繁轮换密钥的建议,生成的提供程序不执行此检查。

管理事件现在可能包含有关事件触发时上下文的其他详细信息

在此版本中,管理事件可能包含有关事件触发时上下文的其他详细信息。升级时,您应该预期数据库架构将更新,以向 ADMIN_EVENT_ENTITY 表添加新的列 DETAILS_JSON

删除了 OpenShift v3 身份代理

由于 OpenShift v3 早已达到生命周期结束,因此已从 Keycloak 中删除了对与 OpenShift v3 进行身份代理的支持。

升级

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

所有已解决的问题

新功能

增强功能

缺陷