Release Notes


Red Hat build of Keycloak 26.0

Red Hat Customer Content Services

摘要

本指南由 Red Hat build of Keycloak 的发行注记组成。

第 1 章 Red Hat build of Keycloak 26.0

1.1. 概述

Red Hat build of Keycloak 基于 Keycloak 项目,它允许您根据流行的标准(如 OpenID Connect、OAuth 2.0 和 SAML 2.0)提供 Web SSO 功能来保护 Web 应用程序。红帽构建的 Keycloak 服务器作为基于 OpenID Connect 或 SAML 的用户身份供应商(IdP),允许您的企业用户目录或第三方 IdP 使用基于标准的安全令牌保护您的应用程序。

虽然保留 Red Hat Single Sign-on 的电源和功能,但红帽构建的 Keycloak 速度更快、更灵活且效率。Red Hat build of Keycloak 是一个使用 Quarkus 构建的应用程序,它为开发人员提供灵活性和模块化功能。Quarkus 提供了一个框架,它针对容器优先方法进行了优化,并提供许多用于开发云原生应用的功能。

1.2. 26.0.15 的更新

此版本包含几个 已解决的问题

1.3. 26.0.14 的更新

此版本包含几个 已解决的问题

1.4. 26.0.13 的更新

此发行版本包含多个 已解决的问题,以及如何按电子邮件验证帐户的更改。

执行验证 现有帐户是第一个 登录流必须允许代理帐户链接到现有 Keycloak 用户的红帽构建的替代方案之一。当用户第一次通过代理登录到红帽构建的 Keycloak 时,会执行这一步,并且红帽构建的 Keycloak 中已存在身份提供程序帐户。执行会向当前红帽构建的 Keycloak 地址发送电子邮件,以确认用户控制该帐户。

由于此版本,只有外部身份提供程序发送的链接属性( 电子邮件和用户名)在审核过程中用户不会修改第一个 登录流 中,则验证现有帐户 by 电子邮件执行才会在第一个登录流中尝试。这个新行为可避免向可意外接受链接的现有红帽构建的 Keycloak 帐户发送验证电子邮件。

如果供应商需要修改身份提供程序发送的信息(因为代理中的电子邮件或用户名不同),则只有其他替代的 Verify Existing Account By Re-authentication 可将新帐户链接到现有的 Red Hat build of Keycloak 用户。

如果从身份提供程序接收的数据是必需的且无法修改,可以禁用 First Login Flow 中的 Review Profile 步骤以避免用户干预。

如需更多信息,请参阅 服务器管理指南中的第一个登录流程部分

1.5. 26.0.12 的更新

此版本包含几个 已解决的问题

1.6. 26.0.11 的更新

此发行版本包含几个 已解决的问题、CVE 修复以及 JWT 客户端身份验证的更改。

1.6.1. CVE 修复

  • CVE-2025-2559 JWT Token Cache Exhaustion to Denial of Service (DoS) in Keycloak.具有长期 JWT 令牌的可信客户端可能会导致 Keycloak 中的内存耗尽,因为未绑定的令牌缓存。
  • CVE-2025-3501 主机名验证问题,导致信任存储信任所有证书。通过将验证策略设置为"ALL' 不仅跳过主机名检查,而且还会使用信任存储证书验证,这是意外的副作用。
  • CVE-2025-3910 绕过两个因素身份验证。AIA (应用程序发起的操作)可用于绕过管理员在登录后由管理员配置的必要操作。这可能会导致用户绕过要求,如设置 2FA。

    • 管理员执行所需操作所需的用户帐户。
    • 在登录过程中传递 URL 参数的同一用户。

1.6.2. 更改 JWT 客户端身份验证

当客户端被配置为使用 Signed JWTSigned JWT with Client Secret 类型进行身份验证时,Red Hat build of Keycloak 现在为令牌强制执行最大过期。因此,虽然令牌中的过期(过期)声明可能较晚,但红帽构建的 Keycloak 不接受在最大过期时间前发布的令牌。默认值为 60 秒。

请注意,在发送 JWT 令牌以进行身份验证之前,应先发布 JWT 令牌。这为客户端提供了一个一分钟窗口,用于发送令牌以进行登录。您可以使用客户端 Credentials 选项卡中的 Max expiration 配置选项来调整此过期。如需了解更多详细信息,请参阅 机密客户端凭证

1.7. 26.0.10 的更新

此发行版本包含几个 已解决的问题、CVE 修复以及发送重置电子邮件的更改。

1.7.1. CVE 修复

  • CVE-2025-0604 Authentication Bypass Due to Missing LDAP Bind After Password Reset in Keycloak
  • CVE-2025-1391 Keycloak 可能允许用户错误地将机构分配给用户

1.7.2. 更改发送重置电子邮件

在以前的版本中,如果使用相同的身份验证会话(相同身份验证会话),重置凭证流(忘记密码 功能)在重置凭据后保持登录。对于联邦用户供应商,此行为可能是安全问题。试想一下,一个提供程序实施可以检测 已启用 的用户,执行一次成功的密码更改,但以某种方式验证用户密码失败。在这种情况下,重置凭证流允许用户在不允许使用正常浏览器流登录密码后登录。这种情境是不常见的情况,但默认应该避免它。

在当前发行版本中,验证器 reset-credential-email (Send Reset Email)有一个新的配置选项,名为 force-login (在重置后强制登录)有三个可能值:

  • true - 始终强制登录
  • false - 以前在使用同一身份验证会话时使用户登录的行为
  • only-federated - 强制联邦用户再次进行身份验证的默认值,并为存储在 Red Hat build of Keycloak 的内部数据库的用户保留之前的行为

有关更改此选项的详情,请参阅启用忘记密码

1.8. 26.0.9 更新

此版本包含几个 已解决的问题

1.9. 26.0.8 的更新

此发行版本包括几个 已解决的问题 和 CVE 修复。

1.9.1. CVE 修复

  • CVE-2024-11734 Unrestricted admin 使用系统和环境变量

    安全漏洞已被识别,如果设置了某些配置,可以使管理用户访问敏感数据,可能会发现服务器环境的内部详情。

  • CVE-2024-11736 Denial of Service in Red Hat build of Keycloak Server via Security Headers

    红帽构建的 Keycloak 中已识别了潜在的拒绝服务(DoS)漏洞。具有修改域设置的管理用户可能会利用此问题导致服务中断。如果触发,可能会阻止用户访问依赖 Keycloak 的应用程序,或使用受影响域中的管理控制台。

1.9.2. 在域配置中使用系统变量

要优先选择更加安全的服务器运行时,避免意外公开系统变量,您现在被强制在启动服务器时使用 spi-admin-allowed-system-variables 配置选项来指定您要公开的系统变量。

在以后的发行版本中,这个功能将被删除,而是防止在域配置中使用系统变量。

1.10. 26.0.7 的更新

此发行版本包含多个 固定问题 以及这些额外的更新。

1.10.1. 容器镜像使用 OpenJDK 21

在这个版本中,容器镜像使用 OpenJDK 21,它提供优于 OpenJDK 17 的性能。

1.10.2. getAll () 方法在特定 API 中弃用

Organization 和 OrganizationMembers API 中的 getAll () 方法现已弃用,并将在下一个主发行版本中删除。反之,在 Organization 和 OrganizationMembers API 中使用对应的 list (first, max) 方法。

1.11. 26.0.6 的更新

此发行版本包含多个 固定的问题,以及以下附加更改。

1.11.1. CVE 修复

在使用反向代理时,在 X.509 客户端证书查找中发现潜在的存在安全漏洞的配置。如果您通过代理标头配置了客户端证书查找,可能需要额外的配置步骤。如需了解更多详细信息,请参阅启用客户端证书查找

1.11.3. 管理事件可能包括更多详细信息

在本发行版本中,在事件触发时,管理事件可能会保存有关上下文的更多详情。升级后,在 ADMIN_EVENT _ENTITY 表中找到数据库模式有一个新的列opg_JSON

1.11.4. 密钥解析器的安全改进

在使用 REALM_FILESEPARATOR_KEY 密钥解析器时,Red Hat build of Keycloak 现在限制对域外的 FileVault secret 的访问。现在,禁止在管理控制台中指定表达式占位符时导致路径遍历。

另外,KEY_ONLY 键解析器现在会转义 _ 字符,以防止在使用 REALM_UNDERSCORE_KEY 解析器时读取其他域将链接到另一个域的 secret。转义只是将 _ 替换为 __,例如 ${vault.my_secret} 现在查找名为 my__secret 的文件。由于这是中断的变化,因此会记录警告以简化转换过程。

1.12. 新功能及功能增强

以下发行注记适用于红帽构建的 Keycloak 26.0.5,它是产品的第一个 26.0 发行版本。

1.12.1. Java 支持

红帽构建的 Keycloak 现在支持 OpenJDK 21。OpenJDK 17 支持已弃用,将在以下发行版本中删除 OpenJDK 21。

1.12.2. Keycloak JavaScript 适配器现在独立

Keycloak JavaScript 适配器现在是一个独立的库,因此不再由红帽构建的 Keycloak 服务器提供。目标是分离红帽构建的 Keycloak 服务器的库,以便可以独立重构它,简化代码并便于以后维护。另外,库现在没有第三方依赖项,这使得它更轻便且更易于在不同环境中使用。

有关更改的完整分类,请参阅 升级指南

此发行版本引入了机构。该功能利用 Red Hat build of Keycloak 的现有 Identity and Access Management (IAM)功能解决客户身份和访问管理(CIAM)用例,如 Business-to-Business (B2B)和 business-to-Business-to-Consumer (B2B2C)集成。通过使用一个域的现有功能,这个功能的第一个发行版本提供了非常的核心功能,允许域与业务合作伙伴和客户集成:

  • 管理机构
  • 管理机构成员
  • 使用不同策略(如邀请链接和代理)的加入成员
  • 使用主题所属机构的额外元数据声明令牌

如需了解更多详细信息,请参阅管理机构

1.12.4. 将机构用于域中多个社交代理实例

现在,一个域中可以有多个同一社交代理实例。

通常,一个域不需要同一社交代理的多个实例。但是,有了 机构 功能,您可以将同一社交代理的不同实例链接到不同的机构。

在创建社交代理时,请提供 Alias 和可选的 Display 名称,就像任何其他代理一样。

1.12.5. 在域表示中不再提供身份提供程序

为了帮助扩展具有许多身份提供程序的域和机构,realm 表示不再包含身份提供程序列表。但是,在导出域时,它们仍然可从 realm 表示中可用。

如需了解更多详细信息,请参阅 身份提供程序

1.12.6. 默认情况下,用户会话保留

以前的红帽构建的 Keycloak 版本只会在数据库中存储离线用户和离线客户端会话。新功能 persistent-user-sessions 将在线用户会话和在线客户端会话存储在内存和数据库中。因此,即使红帽构建的 Keycloak 的所有实例都已重启或升级,用户也可以保持登录。

如需了解更多详细信息,请参阅 持久用户会话

此功能默认为启用。如果要禁用它,请参阅 配置分布式缓存 章节中的 Volatile 用户会话 步骤以了解更多详细信息。

1.12.7. 帐户控制台和管理控制台更改

1.12.7.1. 新的 Admin Console 默认登录主题

存在新版本的 keycloak 登录主题。v2 版本提供了改进的外观和感觉,包括对根据用户首选项自动切换到黑色主题的支持。之前的版本(v1)已被弃用,并将在以后的发行版本中删除。

所有新域的默认登录主题将是 keycloak.v2。另外,从不明确设置登录主题的现有域将切换到 keycloak.v2

1.12.7.2. PatternFly 5 用于 Admin 和 Account 控制台

在 Red Hat build of Keycloak 24 中,Welcome 页 ws 更新为使用 PatternFly 5,这是支持红帽构建的 Keycloak 用户界面的设计系统的最新版本。在本发行版本中,Admin Console 和 Account 控制台也更新为使用 PatternFly 5。如果要扩展和自定义管理控制台和帐户控制台,请查看 PatternFly 5 中的更改,并相应地更新您的自定义。

1.12.9. 您已登录消息

红帽构建的 Keycloak 24 版本提供了在多个浏览器选项卡中并行验证用户时的改进。但是,当身份验证会话过期时,这个改进不会解决这种情况。在本发行版本中,当用户已登录到一个浏览器标签页,并在另一个浏览器标签页中过期身份验证会话时,红帽构建的 Keycloak 会重新重定向到带有 OIDC/SAML 错误的客户端应用程序。因此,客户端应用可以立即重试身份验证,这通常应因为 SSO 会话自动登录应用。

请注意,当身份验证会话过期和用户 已经登录时,您已登录 的消息不会显示给最终用户。您可以考虑更新应用程序以处理这个错误。

如需了解更多详细信息,请参阅 身份验证会话

1.12.10. 根据用户属性搜索现在区分大小写

当按 user 属性搜索用户时,Red Hat build of Keycloak 不再搜索用户属性名称强制进行小写比较。此更改的目标是通过在用户属性表中使用红帽构建的 Keycloak 原生索引来加快搜索。如果您的数据库合并不区分大小写,您的搜索结果将保持不变。如果您的数据库合并区分大小写,您可能会看到比以前更少的搜索结果。

1.12.11. 检查密码是否包含用户名的密码策略

Red Hat build of Keycloak 支持一个新的密码策略,它允许您拒绝包含用户用户名的用户密码。

1.12.12. 所需操作改进

现在,您可以在特定域的 Required 操作 选项卡中配置一些操作。目前,更新密码 是唯一内置的可配置操作。它支持设置 Maximum Age of Authentication,这是用户可在不重新身份验证的情况下通过 kc_action 参数(用于实例在帐户控制台中更新密码)更新其密码的最长时间。

也改进了所需操作的排序。当在身份验证过程中需要多个操作时,无论它们是在身份验证期间设置的操作(例如,kc _action 参数),还是管理员手动添加到用户帐户中的操作。

1.12.13. SAML 的默认客户端配置集

添加了安全 SAML 客户端的默认客户端配置集。在管理控制台中浏览域的客户端策略时,您会看到新的客户端配置文件 saml-security-profile。当使用它时,会为 SAML 客户端应用安全最佳实践。例如,强制签名,SAML 重定向绑定被禁用,禁止通配符重定向 URL。

1.12.14. 改进删除用户同意的性能

当删除客户端范围或完整域时,还应删除关联的用户同意。添加了表 USER_CONSENT_CLIENT_SCOPE 的新索引,以提高性能。

请注意,如果表包含超过 300,000 个条目,红帽构建的 Keycloak 会在自动模式迁移过程中跳过创建索引,并将 SQL 语句记录到控制台中。在红帽构建的 Keycloak 启动后,该声明必须在数据库中手动运行。

1.12.15. 凭证的新常规事件类型

现在,有常规事件可用于更新(UPDATE_CREDENTIAL)并删除(REMOVE_CREDENTIAL)凭证。凭据类型在事件的 credentials_type 属性中描述。Email Event Listener 支持新事件类型。

以下事件类型现已弃用,并将在以后的版本中删除: UPDATE_PASSWORD, UPDATE_PASSWORD_ERROR , UPDATE_ TOTP ,UPDATE_TOTP _ERROR,REMOVE_TOTP,REMOVE_TOTP_ERROR.

1.12.16. 指标和健康端点的管理端口

指标和健康检查端点无法通过标准的红帽构建 Keycloak 服务器端口访问。由于这些端点应在外部世界中隐藏,因此可以在单独的默认管理端口 9000 上访问它们。

使用单独的端口可防止用户作为 Kubernetes 环境中的 Keycloak 端点的标准红帽构建。新的管理界面提供了一组新的选项,您可以配置它们。

Red Hat build of Keycloak Operator 假设管理界面默认启用。如需了解更多详细信息 ,请参阅配置管理界面

1.12.16.1. 默认启用嵌入式缓存的指标

现在默认启用嵌入式缓存的指标。要为延迟启用直方图,请将 cache-metrics-histograms-enabled 选项设置为 true

1.12.16.2. 默认启用 HTTP 端点的指标

红帽构建的 Keycloak 提供的指标现在包含以 http_server 开始的 HTTP 服务器指标。有关一些示例,请参见以下信息。

http_server_active_requests 1.0
http_server_requests_seconds_count{method="GET",outcome="SUCCESS",status="200",uri="/realms/{realm}/protocol/{protocol}/auth"} 1.0
http_server_requests_seconds_sum{method="GET",outcome="SUCCESS",status="200",uri="/realms/{realm}/protocol/{protocol}/auth"} 0.048717142
Copy to Clipboard Toggle word wrap

使用新的选项 http-metrics-histograms-enabledhttp-metrics-slos 启用默认的直方存储桶或特定存储桶以实现服务级别目标(SLO)。参阅 Prometheus 文档中的有关直方图的更多信息,了解如何使用 http_server_requests_seconds_bucket 中提供的额外指标系列。

1.12.17. 客户端库更新

1.12.17.1. 客户端库的专用发行版本周期

从这个版本开始,一些红帽构建的 Keycloak 客户端库会独立于红帽构建的 Keycloak 服务器发行周期。当客户端库与红帽构建的 Keycloak 服务器一起发布时,26.0 版本可能是最后一个版本。现在,客户端库可能会在与红帽构建的 Keycloak 服务器不同时发布。

客户端库是这些工件:

  • Java 管理客户端 - Maven 工件 org.keycloak:keycloak-admin-client
  • Java 授权客户端 - Maven 工件 org.keycloak:keycloak-authz-client
  • Java 策略强制 - Maven 工件 org.keycloak:keycloak-policy-enforcer
1.12.17.2. 客户端库与服务器的兼容性

从这个版本开始,客户端库会使用相同的服务器版本和几个以前的主要服务器版本进行测试和支持。

有关使用服务器版本支持的客户端库版本的详情,请参阅 升级指南

1.12.19. 轻量级访问令牌

1.12.19.1. 轻量级访问令牌,甚至更轻便

在以前的版本中,添加了对轻量级访问令牌的支持。在本发行版本中,更为内置的声明会从轻量级访问令牌中删除。协议映射程序添加声明。有些会影响到常规的访问令牌或 ID 令牌,因为它们没有被 OIDC 规格严格的要求。

  • 现在,协议映射程序添加了声明 subauth_time,这在新的客户端范围 basic 中被默认配置,这会自动添加到所有客户端。声明仍然作为以前添加到 ID 令牌和访问令牌中,但不要添加到轻量级访问令牌中。
  • 现在,声明 非ce 只会添加到 ID 令牌中。它不添加到常规访问令牌或轻量级访问令牌中。为了向后兼容,您可以通过协议映射程序将此声明添加到访问令牌中,这需要明确配置。
  • 声明 session_state 现在不会添加到任何令牌。您仍然可以通过协议映射程序添加它。其他专用的声明 sid 仍然受到规范的支持,该规范在以前的版本中可用,并且具有相同的值。

如需了解更多详细信息,请参阅 新默认客户端范围 basic

1.12.19.2. 用于 Admin REST API 的轻量级访问令牌

轻量级访问令牌现在可以在管理员 REST API 上使用。security-admin-consoleadmin-cli 客户端现在默认使用轻量级访问令牌,因此 "Always Use lightweight Access Token" 和 "Full Scope Allowed" 现在在这两个客户端上启用。但是,管理控制台中的行为应有效保持不变。如果您已对这两个客户端进行了更改,并且您使用它们用于其他目的,请小心。

在调用令牌内省端点时,您可以使用 HTTP Header Accept: application/jwt。为特定客户端启用后,它将使用完整的 JWT 访问令牌从令牌内省端点返回声明 jwt,这非常有用,特别是当客户端调用内省端点使用轻量级访问令牌时。

1.12.21. 密码更改

1.12.21.1. Argon2 密码哈希

Argon2 现在是红帽在非FIPS 环境中构建 Keycloak 的默认密码哈希算法。

Argon2 是 2015 密码散列竞争者,是 OWASP 的建议哈希算法。

在 Red Hat build of Keycloak 24 中,PBKDF2 的默认哈希迭代从 27.5K 增加到 210K,从而导致生成密码哈希所需的 CPU 时间量增加 10 倍。使用 Argon2,您可以实现与以前红帽构建的 Keycloak 版本相同的 CPU 时间更高的安全性。一个缺点是 Argon2 需要更多内存,这是防止 GPU 攻击的要求。红帽构建的 Keycloak 中 Argon2 的默认值需要每个哈希请求 7MB。

为防止过量内存和 CPU 使用量,Argon2 的并行计算默认限制为 JVM 可用的内核数。为了支持 Argon2 的内存密集型性质,默认的 GC 从 ParallelGC 更新至 G1GC 以获得更好的堆利用率。

请注意,Argon2 不兼容 FIPS 140-2。因此,如果您在 FIPS 环境中,默认算法仍为 PBKDF2。另请注意,如果您处于非FIPS 环境,并且计划迁移到 FIPS 环境,请考虑将密码策略改为 FIPS 兼容算法,如 outset 中的 pbkdf2-sha512。否则,用户在切换到 FIPS 环境后将无法登录。

1.12.21.2. 检查密码是否包含用户名的密码策略

Red Hat build of Keycloak 支持一个新的密码策略,它允许您拒绝包含用户用户名的用户密码。

1.12.22. Passkeys 改进(预览)

添加了对 Passkeys 条件 UI 的支持。当启用此预览功能时,提供了一个专用的验证器。您可以从可用的 passkeys 帐户列表中选择,并根据用户进行身份验证。

1.12.24. 授权更改

1.12.24.1. 破坏授权客户端库中的修复

对于 keycloak-authz-client 库的用户,调用 AuthorizationResource.getPermissions (…​) 现在可以正确地返回 List<Permission&gt;。在以前的版本中,它将在运行时返回一个 List<Map&gt;,即使方法声明公告 List<Permission>

在这个版本中,会破坏依赖 List 或它的内容到 List<Map > 的代码。

在导出客户端的授权设置时,资源、范围和策略的 ID 不再设置。现在,您可以将设置从一个客户端导入到另一个客户端。

1.12.26. 配置 LDAP 连接池

在本发行版本中,LDAP 连接池配置只依赖于系统属性。

如需了解更多详细信息 ,请参阅配置连接池

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

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

从外部 java 密钥存储文件加载 realm 密钥的 java-keystore 密钥提供程序已修改为管理 Keycloak 算法的所有红帽构建。此外,可以使用 vault 从存储检索实际密钥所需的密钥存储和密钥机密。因此,红帽构建的 Keycloak 域可将任何密钥外部化到加密文件,而无需存储在数据库中。

有关此主题的更多信息,请参阅配置域密钥

1.12.29. 会话生命周期和空闲计算中的小变化

在以前的版本中,如果会话仍然有效,在验证会话仍然有效时,会话 max 生命周期和空闲超时计算略有不同。现在,验证使用与项目的其余部分相同的代码。

如果会话使用 remember me 功能,则空闲超时和 max 生命周期是通用 SSO 和记住我配置值之间的最大值。

1.12.30. 新主机名选项

由于主机名配置设置的复杂性,这个版本包括 Hostname v2 选项。原始主机名选项已被删除。如果您有自定义主机名设置,您应该迁移到新选项。请注意,这些选项背后的行为也已改变。

如需了解更多详细信息,请参阅 新主机名选项

1.12.31. 日志增强

1.12.31.1. 用于远程日志的 syslog

红帽构建的 Keycloak 现在支持根据 RFC 5424 中定义的协议进行远程日志记录的 Syslog 协议。如果启用 syslog 处理程序,它会将所有日志事件发送到远程 syslog 服务器。

如需更多信息,请参阅 配置日志记录

1.12.31.2. 日志处理程序的不同日志级别

现在,您可以为所有可用日志处理程序指定日志级别,如 控制台文件syslog。这更为精细的方法是您可以控制整个应用程序的日志记录,以满足您的具体需求。

如需更多信息,请参阅 配置日志记录

1.12.32. 所有 缓存 选项都是运行时

现在,您可以在运行时指定缓存、 cache -stackcache-config-file 选项。此更改消除了执行构建阶段的需要,并使用这些选项重建您的镜像。

如需了解更多详细信息,请参阅 在运行时指定缓存选项

1.12.33. 高可用多站点部署的改进

Red Hat build of Keycloak 26 对推荐的高可用性多站点架构进行了显著改进,最重要的是:

  • 红帽构建的 Keycloak 部署现在可以在两个站点同时处理用户请求。
  • 现在,在出现故障时,对站点之间的连接监控需要更新站点之间的复制。
  • loadbalancer 蓝图已更新为使用 AWS 全局加速器,因为这可避免客户端导致 DNS 缓存造成较长的故障时间。
  • 现在,永久用户会话是必需的。因此,用户会话将保存在红帽构建的 Keycloak 或 Data Grid 升级时。

有关实施的详情,请参阅 高可用性多站点部署

1.12.34. method getExp 添加到 SingleUseObjectKeyModel

由于从 AccessTokenIDTokenJsonWebToken 中删除已弃用的方法后,SingleUseObjectKeyModel 也改变,以保持与过期值相关的方法名称的一致性。

如需了解更多详细信息,请参阅 SingleUseObjectKeyModel

1.12.35. 支持 PostgreSQL 16

支持的和测试的数据库现在包含 PostgreSQL 16。

Marshalling 是将 Java 对象转换为字节的过程,以便在红帽构建的 Keycloak 服务器之间在网络上发送它们。在 Red Hat build of Keycloak 26 中,marshalling 格式从 JBoss Marshalling 改为 Infinispan Protostream。

警告

JBoss Marshalling 和 Infinispan Protostream 相互不兼容,不正确的用法可能会导致数据丢失。因此,所有缓存都会在升级到这个版本时清除。

Infinispan Protostream 基于 协议缓冲 (proto 3),其利用了后向/转发兼容性。

1.12.37. Keycloak CR 更改

1.12.37.1. Keycloak CR 支持标准调度选项

Keycloak CR 现在公开第一个类属性来控制 Keycloak Pod 的调度。scheduling 小节会公开可选的标准 Kubernetes 关联性、容限、拓扑分布约束和优先级类名称,以微调服务器 Pod 的调度和放置。

如需了解更多详细信息,请参阅 调度

1.12.37.2. KeycloakRealmImport CR 支持占位符替换

KeycloakRealmImport CR 现在公开 spec.placeholders,以创建导入中占位符替换的环境变量。

如需了解更多详细信息,请参阅 Realm import

1.12.38. 管理引导和恢复

在以前的版本中,当所有管理员用户被锁定时,重新获得红帽构建的 Keycloak 实例的访问权限非常困难。但是,Red Hat build of Keycloak 现在提供新的方法来引导临时 admin 帐户,并恢复丢失的 admin 访问权限。

现在,您可以使用特定选项运行 startstart-dev 命令,以创建临时 admin 帐户。另外,引入了一个新的专用命令,允许用户快速重新获得管理员访问权限。

因此,环境变量 KEYCLOAK_ADMINKEYCLOAK_ADMIN_PASSWORD 已被弃用。您应该改为使用 KC_BOOTSTRAP_ADMIN_USERNAMEKC_BOOTSTRAP_ADMIN_PASSWORD。这些是常规选项,因此可以通过 cli 或其他配置源来指定,如 --bootstrap-admin-username=admin

如需更多信息,请参阅 临时 admin 帐户

1.12.39. OpenTelemetry 跟踪技术预览功能

对 OpenTelemetry Tracing 的底层 Quarkus 支持已公开给红帽构建的 Keycloak,并允许您获取应用程序 trace 以获得更好的可观察性。此功能包括查找性能瓶颈的功能,确定应用故障的原因,并通过分布式系统追踪请求。

如需更多信息,请参阅 启用追踪

1.12.40. DPoP 的改进

DPoP (OAuth 2.0 演示-Possession)预览功能有改进。现在,所有授权类型都支持 DPoP。在以前的版本中,这个功能只支持 authorization_code 授权类型。在 UserInfo 端点上也支持 DPoP 令牌类型。

现在,红帽构建的 Keycloak 允许配置 ECDH-ES、ECDH-ES+A128KW、ECDH-ES+A192KW 或 ECDH-ES+A256KW 作为客户端的加密密钥管理算法。带有 Elliptic Curve Diffie-Hellman Ephemeral Static (ECDH-ES)规范的密钥协议为 JWT 引入了三个新标头参数: epkauuapv。目前,Red Hat build of Keycloak 实现只管理 compulsory epk,而其他两个(是可选的)则永远不会添加到标头中。有关这些算法的更多信息,请参阅 JSON Web 算法(JWA)

另外,新的密钥提供程序 ecdh-generated 也可用于生成域密钥并支持 ECDH 算法。

1.12.42. 重启后持久保留已撤销的访问令牌

在本发行版本中,撤销的访问令牌写入数据库,并在使用嵌入式缓存时默认重启集群时重新载入。

如需了解更多详细信息,请参阅 持久性删除访问令牌

1.12.43. 客户端策略中的客户端属性状况

基于 client-attribute 的条件添加到客户端策略中。您可以使用此条件为具有指定的值的指定客户端指定客户端。在评估此条件时,请使用 AND 或 OR 条件,如客户端策略文档中所述。

现在,红帽构建的 Keycloak 允许配置 ECDH-ES、ECDH-ES+A128KW、ECDH-ES+A192KW 或 ECDH-ES+A256KW 作为客户端的加密密钥管理算法。带有 Elliptic Curve Diffie-Hellman Ephemeral Static (ECDH-ES)规范的密钥协议为 JWT 引入了三个新标头参数: epkauuapv。目前,红帽构建的 Keycloak 实现只管理 compulsory epk,而其他两个(可选)永远不会添加到标头中。有关这些算法的更多信息,请参阅 JSON Web 算法(JWA)

另外,新的密钥提供程序 ecdh-generated 也可用于生成域密钥并支持 ECDH 算法。

1.12.45. 添加了选项 proxy-trusted-addresses

当将 proxy-headers 选项设置为指定可信代理地址的 allowlist 时,可以使用 proxy-trusted-addresses。如果给定请求的代理地址不被信任,则不会使用对应的代理标头值。详情请查看 受信任的代理

1.12.46. 添加了选项 proxy-protocol-enabled

proxy-protocol-enabled 选项控制服务器在提供代理后面的请求时是否应该使用 HA PROXY 协议。当设置为 true 时,返回的远程地址将是实际连接客户端中的地址。详情请参阅 代理协议。

可以设置 https-certificates-reload-period 选项,以定义由 https netobserv 选项引用的密钥存储、信任存储和证书文件的重新载入周期。使用 -1 禁用重新加载。默认值为 1h (一小时)。详情请参阅 证书和密钥重新加载

1.12.48. 添加了缓存 max-count 的选项

可以设置 --cache-embedded-${CACHE_NAME}-max-count=,以定义指定缓存中缓存条目数量的上限。

1.12.49. https-trust-store CNO 选项已被弃用

根据社区反馈,我们决定取消弃用 https-trust-store suit 选项,以便在可信证书中实现更好的粒度。

1.13. 适配器支持

在这个 Red Hat build of Keycloak 版本中,支持以下适配器:

  • JavaScript 适配器:26.0.12
  • Node.js 适配器:26.0.11
  • JBoss EAP OpenID Connect 适配器: 8.0
  • JBoss EAP 的 Keycloak SAML Adapter RPM: 8.0

1.14. 弃用的功能

在前面的部分中,一些功能已经作为已弃用。以下小节详细介绍了其他已弃用功能。

1.14.1. RESTEasy util 类已弃用

org.keycloak.common.util.Resteasy 已弃用。您应该使用 org.keycloak.util.KeycloakSessionUtil 获取 KeycloakSession

强烈建议您通过在创建自定义提供程序时避免获取 KeycloakSession

1.14.2. UserRepresentation 中的属性源已弃用

UserRepresentation 中的 origin 属性已弃用,计划在以后的发行版本中删除。

相反,最好使用 federationLink 属性获取用户链接到的供应商。

1.14.3. keycloak-common 模块中的弃用

在即将推出的 Red Hat build of Keycloak 版本时,以下项目已弃用,且没有替换:

  • org.keycloak.common.util.reflections.Reflections.newInstance(java.lang.Class<T>)
  • org.keycloak.common.util.reflections.Reflections.newInstance (java.lang.Class<?>, java.lang.String)
  • org.keycloak.common.util.reflections.SetAccessiblePrivilegedAction
  • org.keycloak.common.util.reflections.UnSetAccessiblePrivilegedAction

1.14.4. 在 keycloak-services 模块中弃用

UserSessionCrossDCManager 已被弃用,计划在以后的 Keycloak 版本中删除。阅读 UserSessionCrossDCManager Javadoc,以了解要使用的替代方法。

1.14.5. 弃用的帐户 REST 端点用于删除凭证

用于删除用户凭证的账户 REST 端点已弃用。从这个版本开始,帐户控制台不再使用此端点。它被 Delete Credential application-initiated 替代。

1.14.6. 弃用的 keycloak 登录主题

keycloak 登录主题已弃用,现在使用新的 keycloak.v2,并将在以后的版本中删除。虽然出于兼容性的原因为新域保留默认值,但强烈建议您将所有 realm 切换为 keycloak.v2

1.14.7. 在 PasswordHashProvider 中弃用的方法编码

接口 org.keycloak.credential.hash.PasswordHashProvider 上的方法 String encode (String rawPassword, int iterations) 已被弃用。此方法将在以后的 Red Hat build of Keycloak 版本中删除。

1.14.8. 弃用的主题变量

以下变量在 Admin 主题中被弃用,并将在以后的版本中删除:

  • authServerUrl.改为使用 serverBaseUrl
  • authUrl.改为使用 adminBaseUrl

以下变量在帐户主题中被弃用,并将在以后的版本中删除:

  • authServerUrl.使用 serverBaseUrl 替代,请注意 serverBaseUrl 不包含尾部斜杠。
  • authUrl.使用 serverBaseUrl 替代,请注意 serverBaseUrl 不包含尾部斜杠。

String getCurrentRefreshToken (), void setCurrentRefreshToken (String currentRefreshToken), int getCurrentRefreshTokenUseCount (), 和 void setCurrentRefreshTokenUseCount (int currentRefreshTokenUseCount) 在接口 org.keycloak.models.AuthenticatedClientSessionModel 中已被弃用。它们已被类似的方法替代,它需要一个标识符作为参数,如 getRefreshToken (String reuseId),以在客户端会话中管理多个刷新令牌。在以后的 Red Hat build of Keycloak 版本中会删除方法。

1.15. 删除的功能

在上一节中,已经提到了一些功能,如 removed。以下小节详细介绍了其他删除的功能。

1.15.1. 删除了对 UMD 发行版的支持

Keycloak JS 库的 UMD 发行版 通用基础镜像定义 已被删除。这意味着库不再作为全局变量公开,必须 作为模块 导入。这个变化与现代 JavaScript 开发实践一致,允许在浏览器和构建工具之间获得更深层次的体验,通常会产生更可预测的代码,且具有较少的副作用。

如果您使用捆绑器,如 Vite 或 Webpack 没有任何更改,您将拥有与以前相同的体验。如果您在浏览器中直接使用库,则需要更新代码以导入库:

<!-- Before -->
<script src="/path/to/keycloak.js"></script>
<script>
    const keycloak = new Keycloak();
</script>

<!-- After -->
<script type="module">
    import Keycloak from '/path/to/keycloak.js';
    const keycloak = new Keycloak();
</script>
Copy to Clipboard Toggle word wrap

您还可以选择使用 导入映射 使库的导入不太详细:

<script type="importmap">
    {
        "imports": {
            "keycloak-js": "/path/to/keycloak.js"
        }
    }
</script>
<script type="module">
    // The library can now be imported without specifying the full path, providing a similar experience as with a bundler.
    import Keycloak from 'keycloak-js';
    const keycloak = new Keycloak();
</script>
Copy to Clipboard Toggle word wrap

如果使用 TypeScript,您可能需要更新 tsconfig.json 才能解析库:

{
    "compilerOptions": {
        "moduleResolution": "Bundler"
    }
}
Copy to Clipboard Toggle word wrap

1.15.2. 删除了 CollectionUtil intesection 方法

方法 org.keycloak.common.util.CollectionUtil.intersection 已被删除。您应该对现有集合使用 'java.util.Collection.retainAll'。

1.15.3. 删除帐户控制台 v2 主题

帐户控制台 v2 主题已从红帽构建的 Keycloak 中删除。此主题在红帽构建的 Keycloak 24 中弃用,并被帐户控制台 v3 主题替代。如果您仍然使用这个主题,您应该迁移到帐户控制台 v3 主题。

1.15.4. 原始主机名选项已删除

这些选项被新选项替代,称为 Hostname v2。如需了解更多详细信息,请参阅 配置主机名(v2)新主机名选项

1.15.5. 已删除代理选项

proxy 选项在红帽构建的 Keycloak 24 中被弃用,并在需要时被 proxy-headers 选项替代。如需了解更多详细信息 ,请参阅使用反向代理

1.15.6. 大多数 Java 适配器被删除

现在,大多数 Java 适配器已从红帽构建的 Keycloak 代码库和下载页面中删除。

  • 对于 OAuth 2.0/OIDC,这包括删除 EAP 适配器、Servlet Filter adapter、KeycloakInstalled 桌面适配器、jaxrs-oauth-client 适配器、JAAS 登录模块、Spring 适配器和 SpringBoot 适配器。
  • 对于 SAML,这包括删除 Servlet 过滤器适配器。JBoss EAP 仍然支持 SAML 适配器。
  • 通用授权客户端库仍被支持。您可以将其与任何其他 OAuth 2.0 或 OpenID Connect 库结合使用。您可以检查 快速入门,以了解这个授权客户端库与第三方 Java 适配器(如 Elytron OIDC 或 SpringBoot)一起使用的示例。您还可以检查快速入门以了解与 WildFly 搭配使用的 SAML 适配器示例。

1.15.7. 已删除 OSGi 元数据

由于所有使用 OSGi 元数据的 Java 适配器已被删除,因此不再为我们的 jar 生成 OSGi 元数据。

1.15.8. 旧的 Cookie 被删除

Red Hat build of Keycloak 不再发送 _LEGACY cookies,该 Cookie 引入为不支持 Cookie 上 SameSite 标志的旧浏览器。

_LEGACY cookies 也提供了另一种目的,这是允许从不安全的上下文登录。虽然在 Red Hat build of Keycloak 的生产环境部署中不推荐使用不安全上下文,但最好最好通过 localhost 之外的 http 访问 Red Hat build of Keycloak。作为 _LEGACY Cookie 的替代选择,红帽构建的 Keycloak 不再设置 secure 标志;但在使用不安全上下文时,它会设置 SameSite=Lax 而不是 SameSite=None

1.15.9. EnvironmentDependentProviderFactory 被删除

在几个发行本中弃用了 EnvironmentDependentProviderFactory.isSupported () 方法,现在已被删除。

相反,需要实现 isSupported (Config.Scope config)

以前的红帽构建的 Keycloak 版本支持用户自动退出,并通过打开 logout 端点 URL (如 http (s)://example-host/auth/realms/my-realm-name/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri )来重定向到应用程序。此功能在红帽构建的 Keycloak 18 中弃用,并已在这个版本中删除,并遵循 OpenID Connect 规格。

作为这个更改的一部分,删除了 SPI 的以下相关配置选项:

  • --spi-login-protocol-openid-connect-legacy-logout-redirect-uri
  • --spi-login-protocol-openid-connect-suppress-logout-confirmation-screen

如果您仍然使用这些选项或 redirect_uri 参数用于注销,您应该实施 OpenID Connect RP-Initiated Logout 规格

1.15.11. org.keycloak:keycloak-model-legacy removed

模块 org.keycloak:keycloak-model-legacy 模块在以前的版本中已被弃用,并在此发行版本中被删除。改为使用 org.keycloak:keycloak-model-storage 模块。

1.15.12. 离线会话预加载已删除

现在,在上一个发行版本中弃用后,预加载离线会话的旧行为现已被删除。

groups.setOrCreateChild () 方法已从基于 JavaScript 的 Admin 客户端中删除。如果您仍然使用此方法,请改为使用 createChildGroup ()updateChildGroup () 方法。

1.15.14. 删除了 session_state 声明

session_state 声明包含与 sid 声明相同的值,现在会根据 OpenID Connect Front-Channel Logout 和 OpenID Connect Back-Channel Logout 规格从所有令牌中删除。根据 OpenID Connect Session Management 规格,session_state 声明保留在 Access Token Response 中。

请注意,setSessionState () 方法也已从 IDToken 类中删除,而使用 setSessionId () 方法,getSession State () 方法现已弃用。

还包含一个新的 Session State (session_state) 映射器,并可分配给客户端范围(用于实例 基本 客户端范围)以恢复到旧行为。

如果使用 JS 适配器的旧版本,则应使用客户端范围(如上所述)的 Session State (session_state) 映射程序使用。

1.15.15. 启用持久会话时,空闲会话的宽限期

以前的红帽构建的 Keycloak 版本添加了两分钟宽限期,以闲置用户和客户端会话。这是因为以前的构架,其中会话刷新时间在集群中异步复制。使用持久的用户会话,这已不再需要,因此会删除宽限期。

要保留旧行为,请更新您的域配置,并将会话和客户端闲置时间延长两分钟。

1.15.16. 已删除适配器和 misc BOM 文件

org.keycloak.bom:keycloak-adapter-bomorg.keycloak.bom:keycloak-misc-bom BOM 文件已被删除。adapter BOM 不再有用,因为大多数 Java 适配器都已移除。misc BOM 仅包含一个工件、keycloak-test-helper,且该工件也会在此发行版本中被删除。

1.15.17. 已删除 Keycloak-test-helper

本发行版本中删除了 maven 工件 org.keycloak:keycloak-test-helper。工件提供了一些用于处理 Java 管理客户端的帮助程序方法。如果使用帮助程序方法,如果需要,可以将它们派生到应用程序中。

1.15.18. 已删除EE admin-client

本发行版本中删除了这个安全漏洞的 admin-client,但 Jakarta admin-client 仍被支持。

1.15.19. 已从某些类中删除了已弃用的方法

此方法已从 AccessToken 类中删除:

  • 过期.改为使用 exp 方法。
  • NotBefore.使用 nbf 方法替代。
  • issuedAt.改为使用 iat 方法。

以下方法已从 IDToken 类中删除:

  • getAuthTimesetAuthTime.分别使用 getAuth_timesetAuth_time 方法。
  • NotBefore.使用 nbf 方法替代。
  • issuedAt.改为使用 iat 方法。
  • setSessionState.改为使用 setSessionId 方法(请参阅有关 session_state 声明一节中的详细信息)

以下方法已从 JsonWebToken 类中删除:

  • 过期.改为使用 exp 方法。
  • NotBefore.使用 nbf 方法替代。
  • issuedAt.改为使用 iat 方法。

您还应该预期令牌中没有设置 expnbf 声明,因为它们是可选的。在以前的版本中,这些声明使用 0 值设置,这不会有意义,因为它们的值应该是有效的 NumericDate

1.15.21. 弃用的 LinkedIn 供应商被删除

在版本 22.0 中,LinkedIn 的 OAuh 2.0 社交供应商被一个新的 OpenId Connect 实现替代。传统供应商已弃用,但不被删除,仅当它在某些现有域中正常工作时。Red Hat build of Keycloak 26 是删除旧供应商及其关联的 linkedin-oauth 功能。现在,默认的 LinkedIn 社交供应商是唯一可用的选项。

1.16. 修复的问题

每个发行版本都包括固定的问题:

1.17. 支持的配置

有关红帽构建的 Keycloak 26.0 支持的配置,请参阅 支持的配置

1.18. 组件详情

有关红帽构建的 Keycloak 26.0 支持的组件版本列表,请参阅 组件详情

法律通告

Copyright © 2025 Red Hat, Inc.
根据 Apache 许可证(版本 2.0)授权(License");除非遵守许可证,您可能不能使用此文件。您可以在以下位置获取许可证副本
除非适用法律或同意编写,许可证下的软件将由"AS IS"BASIS 分发,WITHOUT WARRANTIES 或 CONDITIONS OF ANY KIND,可以是表达或表示的。有关许可证下的权限和限制的具体语言,请参阅许可证。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部