1.4. 新功能及功能增强


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

1.4.1. Java 支持

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

1.4.2. Keycloak JavaScript 适配器现在独立

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

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

1.4.3. 机构、多租户和客户身份和访问权限管理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.4.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.4.9. 您已登录消息

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

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

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

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

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

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

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

1.4.12. 所需操作改进

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

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

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

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

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

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

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

1.4.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.4.16. 指标和健康端点的管理端口

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

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

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

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

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

1.4.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

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

1.4.17. 客户端库更新

1.4.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.4.17.2. 客户端库与服务器的兼容性

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

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

1.4.19. 轻量级访问令牌

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

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

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

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

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

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

1.4.20. 在令牌内省端点中支持 application/jwt media-type

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

1.4.21. 密码更改

1.4.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.4.21.2. 检查密码是否包含用户名的密码策略

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

1.4.22. Passkeys 改进(预览)

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

1.4.24. 授权更改

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

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

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

1.4.24.2. 当为客户端导出授权设置时,不再设置 ID

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

1.4.26. 配置 LDAP 连接池

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

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

1.4.27. 使用 Microsoft Active Directory 时默认启用新的 LDAP 用户

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

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

1.4.28. java-keystore 密钥供应商支持更多算法和 vault secret

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

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

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

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

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

1.4.30. 新主机名选项

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

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

1.4.31. 日志增强

1.4.31.1. 用于远程日志的 syslog

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

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

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

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

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

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

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

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

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

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

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

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

1.4.34. method getExp 添加到 SingleUseObjectKeyModel

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

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

1.4.35. 支持 PostgreSQL 16

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

1.4.36. Infinispan marshalling 变为 Infinispan Protostream

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

警告

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

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

1.4.37. Keycloak CR 更改

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

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

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

1.4.37.2. KeycloakRealmImport CR 支持占位符替换

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

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

1.4.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.4.39. OpenTelemetry 跟踪技术预览功能

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

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

1.4.40. DPoP 的改进

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

1.4.41. 添加对 ECDH-ES 加密密钥管理算法的支持

现在,红帽构建的 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.4.42. 重启后持久保留已撤销的访问令牌

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

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

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

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

1.4.44. 添加对 ECDH-ES 加密密钥管理算法的支持

现在,红帽构建的 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.4.45. 添加了选项 proxy-trusted-addresses

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

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

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

1.4.47. 重新加载添加的信任和密钥材料的选项

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

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

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

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.