2.11. 其他更改
2.11.1. Argon2 密码哈希
Argon2 现在是红帽在非FIPS 环境中构建 Keycloak 的默认密码哈希算法。
Argon2 是 2015 密码散列竞争者,是 OWASP 的建议哈希算法。
在 Red Hat build of Keycloak 24 中,PBKDF2 的默认哈希迭代从 27.5K 增加到 210K,从而导致生成密码哈希所需的 CPU 时间量增加 10 倍。使用 Argon2,您可以实现更高的安全性,与以前的红帽构建的 Keycloak 版本几乎相同。一个缺点是 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 环境后将无法登录。
2.11.2. 默认 http-pool-max-threads
减少
如果未设置,则 http-pool-max-threads
将默认为 50 或 4 x (可用处理器)。在以前的版本中,它默认为 200 或 8 x 更大的(可用处理器)。减少大多数使用场景的数量或任务线程会因为活跃线程的上下文切换而降低性能。
2.11.3. 改进了 findGrantedResources
和 findGrantedOwnerResources
查询的性能
当 RESOURCE_SERVER_RESOURCE
和 RESOURCE_SERVER_PERM_TICKET
表具有 100k 条目且用户通过 1k 资源授予了访问权限时,这些查询不佳。这个查询已被简化,并引入了 请求者
和 所有者
列的新索引。
新索引都应用到 RESOURCE_SERVER_PERM_TICKET
表。如果表目前包含 300,000 个条目,红帽构建的 Keycloak 将在自动模式迁移过程中默认跳过创建索引,而是在迁移过程中记录控制台上的 SQL 语句。在这种情况下,在红帽构建 Keycloak 后,必须在 DB 中手动运行语句。
2.11.4. method getExp
添加到 SingleUseObjectKeyModel
由于从 AccessToken
、IDToken
和 JsonWebToken
中删除已弃用的方法后,SingleUseObjectKeyModel
也改变,以保持与过期值相关的方法名称的一致性。
前面的 getExpiration
方法现已弃用,您应该更喜欢使用新的 getExp
方法来避免 2038 后溢出。
2.11.5. 在启用括号强制时,默认阻止并发登录请求
如果攻击者并行启动了很多登录尝试,则攻击者可能会对密码进行更多的猜测,而不是暴力保护配置所允许的。这是因为在暴力强制保护器已锁定用户之前进行暴力检查。为防止这种争用,Brute Force Protector 现在会拒绝在同一服务器中进行另一次登录尝试时发生的所有登录尝试。
如果您希望禁用此功能,请使用以下命令:
bin/kc.[sh|bat] start --spi-brute-force-protector-default-brute-force-detector-allow-concurrent-requests=true
2.11.6. 使用通配符时重定向 URI 验证的更改
由于安全问题,如果传递的 redirect uri 包含 userinfo
部分或其 路径访问
父目录(/../
),则重定向 URI 验证现在会执行精确的字符串匹配(不包括通配符)。
完整通配符 *
仍可用作具有这些特征的 http URI 开发中的有效重定向。在生产环境中,为该类型的任何 URI 配置准确的有效重定向 URI。
请注意,不建议在生产环境中使用通配符有效的重定向 URI,而不是 OAuth 2.0 规格涵盖的。
2.11.7. Infinispan marshalling 更改
Marshalling 是将 Java 对象转换为字节的过程,以便在红帽构建的 Keycloak 服务器之间在网络上发送它们。在 Red Hat build of Keycloak 26 中,marshalling 库已从 JBoss Marshalling 改为 Infinispan Protostream。库彼此不兼容,需要一些步骤来确保会话数据不会丢失。
JBoss Marshalling 和 Infinispan Protostream 相互不兼容,不正确的用法可能会导致数据丢失。因此,所有缓存都会在升级到这个版本时清除。所有现有的在线用户和客户端会话都已清除。离线用户和客户端会话不会受到影响。
2.11.8. 自动从 root 重定向到相对路径
指定 http-relative-path
属性时,用户会自动重定向到托管 Red Hat build of Keycloak 的路径。这意味着,当相对路径设置为 /auth
,并且用户访问 localhost:8080/
时,该页面会被重定向到 localhost:8080/auth
。
当指定 http-management-relative-path
或 http-relative-path
属性时,同样的更改适用于管理界面。这个变化提高了用户体验。用户不再需要显式设置 URL 的相对路径。
2.11.9. 为 URL 编码一致使用 UTF-8 charset
org.keycloak.common.util.Encode
现在总是使用 UTF-8
charset 进行 URL 编码,而依赖于 file.encoding
系统属性。
2.11.10. 配置 LDAP 连接池
在本发行版本中,LDAP 连接池配置只依赖于系统属性。主要的原因是 LDAP 连接池配置是 JVM 级别的配置,而不是特定于单个域或 LDAP 提供程序实例。
与之前的版本相比,任何与 LDAP 连接池相关的域配置都将被忽略。如果您要从将以下设置设置为 LDAP 提供程序的早期版本迁移,请考虑使用系统属性:
-
connectionPoolingAuthentication
-
connectionPoolingInitSize
-
connectionPoolingMaxSize
-
connectionPoolingPrefSize
-
connectionPoolingTimeout
-
connectionPoolingProtocol
-
connectionPoolingDebug
如需了解更多详细信息 ,请参阅配置连接池。
2.11.11. 重启后持久保留已撤销的访问令牌
在本发行版本中,撤销的访问令牌写入数据库,并在使用嵌入式缓存时默认重启集群时重新载入。
要禁用此行为,请使用 SPI 选项 spi-single-use-object-infinispan-persist-revoked-tokens
,如 All provider configuration 所述。
SingleUseObjectProvider
的 SPI 行为已更改,它只用于撤销的令牌,且只能使用 包含
的方法。默认情况下会强制执行此设置,可以使用 SPI 选项
spi-single-use-object-infinispan-persist-revoked-tokens
来禁用。
2.11.12. 高可用性多站点部署
Red Hat build of Keycloak 26 对推荐的高可用性多站点架构进行了显著改进,最重要的是:
- 红帽构建的 Keycloak 部署现在可以在两个站点同时处理用户请求。之前的负载均衡器配置只在一个站点处理请求时才能继续工作。
- 现在,在出现故障时,对站点之间的连接监控需要重新配置站点之间的复制。蓝图描述了带有 Alertmanager 和 AWS Lambda 的设置。
- loadbalancer 蓝图已更新为使用 AWS 全局加速器,因为这可避免客户端导致 DNS 缓存造成较长的故障时间。
- 现在,永久用户会话是必需的。因此,用户会话将保存在红帽构建的 Keycloak 或 Data Grid 升级时。
- 改进了外部 Data Grid 请求处理,以减少内存用量和请求延迟。
由于上述更改,现有 Red Hat build of Keycloak 部署需要以下更改。
-
启用
多站点
功能时,缓存配置文件提供的分布式缓存
定义会被忽略,因此您必须通过cache-remote
fluentd 命令行参数或 Keycloak CR 配置与外部 Data Grid 部署的连接。所有remote-store
配置都必须从缓存配置文件中删除。 - 查看外部 Data Grid 中的当前缓存配置,并使用最新版本的红帽构建的 Keycloak 文档中的更新它们。虽然以前的缓存配置版本仅在站点之间的备份复制失败时记录警告,但新配置可确保两个站点中的状态保持同步:当两个站点之间的传输失败时,调用者将会看到错误。因此,您需要在站点失败时设置监控以断开两个站点的连接。高可用性指南 包含有关如何设置此蓝图。
- 虽然以前的负载均衡器配置将继续与红帽构建的 Keycloak 一起工作,但请考虑升级现有的 Route53 配置,以避免因为客户端 DNS 缓存而延长的故障切换时间。
-
如果您使用 remote-store 配置更新了缓存配置 XML 文件,则这些文件将无法正常工作。相反,启用
多站点
功能并使用cache-remove channel
选项。
2.11.13. 所需操作改进
现在,当从应用程序启动所需操作执行重定向时,通过 kc_action
参数返回所需的操作供应商名称。这简化了为客户端执行哪些所需操作的检测。执行的结果可以通过 kc_action_status
参数来决定。
注: 此功能需要对 Keycloak JS 适配器进行更改,因此,如果要使用此功能,建议升级到最新版本的适配器。
2.11.14. 密钥存储和信任存储默认格式更改
红帽 Keycloak 的构建现在根据文件扩展决定密钥存储和信任存储的格式。如果文件扩展是 .p12
、.pkcs12
或 .pfx
,则格式为 PKCS12。如果文件扩展是 .jks
、.keystore
或 .truststore
,则格式为 JKS。如果文件扩展是 .pem
、.crt
或 .key
,则格式为 PEM。
您仍然可以通过明确指定 https-key-store-type
和 https-trust-store-type
来覆盖自动检测。这也适用于管理界面及其 https-management-key-store-type
。FIPS 严格模式的限制保持不变。
spi-truststore-file
channel 选项和 truststore 相关选项 https-trust-store
fluentd 已被弃用,我们强烈建议您使用 System Truststore。如需更多详细信息,请参阅相关 指南。
2.11.15. 常见
主题资源的路径已更改
keycloak
主题 的通用
资源的一些路径已更改,特别是第三方库的资源。确保相应地更新您的自定义主题:
-
node_modules/patternfly/dist
现在是vendor/patternfly-v3
-
node_modules/@patternfly/patternfly
现在是vendor/patternfly-v4
-
node_modules/@patternfly-v5/patternfly
现在是vendor/patternfly-v5
-
node_modules/rfc4648/lib
现在是vendor/rfc4648
另外,以下资源已从 常见
主题中删除:
-
node_modules/alpinejs
-
node_modules/jquery
如果您之前在主题中使用了任何删除的资源,请确保将它们添加到您自己的主题资源中。
2.11.16. BouncyCastle FIPS 已更新
现在,我们的 FIPS 140-2 集成已在 BouncyCastle FIPS 库的版本 2 中经过测试和支持。此版本通过 Java 21 认证。如果使用 FIPS 140-2 集成,建议将 BouncyCastle FIPS 库升级到最新文档中所述的版本。
BouncyCastle FIPS 版本 2 已通过 FIPS 140-3 认证。因此,只要在 FIPS 140-3 兼容系统上使用它,Red Hat build of Keycloak 就可以符合 FIPS 140-3。这可能是基于 RHEL 9 的系统,它本身与 FIPS 140-3 兼容。但请注意,基于 RHEL 8 的系统只通过 FIPS 140-2 认证。