Keycloak 26.0.0
客户端库更新
客户端库的专用发布周期
从本版本开始,一些 Keycloak 客户端库将拥有独立于 Keycloak 服务器发布周期的发布周期。26.0.0 版本可能是最后一次客户端库与 Keycloak 服务器一起发布的版本。但从现在开始,客户端库可能在与 Keycloak 服务器不同的时间发布。
客户端库是这些工件
-
Java 管理客户端 - Maven 工件
org.keycloak:keycloak-admin-client
-
Java 授权客户端 - Maven 工件
org.keycloak:keycloak-authz-client
-
Java 策略执行程序 - Maven 工件
org.keycloak:keycloak-policy-enforcer
将来可能还会包含更多库。
客户端库支持 Java 8,因此可以在部署在较旧应用程序服务器上的客户端应用程序中使用它们。
用户会话默认情况下被持久化
Keycloak 25 引入了 persistent-user-sessions
功能。启用此功能后,所有用户会话都将持久化到数据库中,而不是以前仅将离线会话持久化到数据库中的行为。在 Keycloak 26 中,此功能默认情况下处于启用状态。这意味着所有用户会话默认情况下都将持久化到数据库中。
可以通过禁用该功能将此行为还原到以前的状态。有关更多详细信息,请按照 配置分布式缓存 指南中 易失性用户会话
部分进行操作。
有关如何升级的信息,请参阅 升级指南。
新的默认登录主题
现在有一个新版本 (v2
) 的 keycloak
登录主题,它提供了改进的外观和感觉,包括支持根据用户偏好自动切换到深色主题。
先前版本 (v1
) 现在已弃用,将在将来某个版本中删除。
对于所有新的 realm,keycloak.v2
将是默认登录主题。此外,任何从未明确设置登录主题的现有 realm 将切换到 keycloak.v2
。
高可用性多站点部署
Keycloak 26 对推荐的 HA 多站点体系结构进行了重大改进,最值得注意的是
-
Keycloak 部署现在能够同时处理两个站点中的用户请求。
-
现在需要对站点之间连接性的主动监控,以便在发生故障时更新站点之间的复制。
-
负载均衡器蓝图已更新为使用 AWS Global Accelerator,因为这避免了由客户端的 DNS 缓存导致的长时间故障转移。
-
持久性用户会话现在是体系结构的要求。因此,用户会话将在 Keycloak 或 Infinispan 升级期间保留。
有关如何迁移的信息,请参阅 升级指南。
管理员引导和恢复
在过去,当所有管理员用户都被锁定后重新访问 Keycloak 实例是一个具有挑战性和复杂的过程。Keycloak 认识到这些挑战并旨在显著提升用户体验,现在提供了几种简单的方法来引导临时管理员帐户并恢复丢失的管理员访问权限。
现在可以使用特定选项运行 start
或 start-dev
命令来创建临时管理员帐户。此外,还引入了新的专用命令,允许用户轻松地重新获得管理员访问权限。
有关此主题的详细说明和更多信息,请参阅 管理员引导和恢复 指南。
OpenTelemetry 追踪预览
对 OpenTelemetry 追踪的底层 Quarkus 支持已暴露给 Keycloak,并允许获取应用程序跟踪以实现更好的可观察性。它有助于查找性能瓶颈,确定应用程序故障的原因,跟踪分布式系统中的请求等等。该支持处于预览模式,我们很乐意获得任何反馈。
有关更多信息,请参阅 启用追踪 指南。
用于可验证凭据签发的 OpenID
可验证凭据签发 OpenID (OID4VCI) 仍然是 Keycloak 中的一个实验性功能,但在这个版本中得到了极大的改进。您将在 Keycloak OAuth SIG 中找到大量的开发和讨论。欢迎 Keycloak 社区的任何成员加入。
非常感谢 OAuth SIG 组的所有成员参与此功能的开发和讨论。特别感谢 Francis Pouatcha、Pascal Knüppel、Takashi Norimatsu、Ingrid Kamga、Stefan Wiedemann 和 Thomas Darimont。
DPoP 改进
DPoP(OAuth 2.0 证明拥有权)预览功能已得到改进。DPoP 现在支持所有授权类型。在之前的版本中,此功能仅支持 authorization_code
授权类型。UserInfo 端点也支持 DPoP 令牌类型。
非常感谢 Pascal Knüppel 的贡献。
删除 GELF 日志处理程序
GELF 支持已经过时了一段时间,在这个版本中它终于从 Keycloak 中删除了。其他日志处理程序可用,并完全支持用作 GELF 的替代,例如 Syslog。有关详细信息,请参阅 日志记录指南。
管理员 REST API 的轻量级访问令牌
现在可以在管理员 REST API 上使用轻量级访问令牌。security-admin-console
和 admin-cli
客户端现在默认使用轻量级访问令牌,因此这两个客户端现在启用了“始终使用轻量级访问令牌”和“允许完整范围”。但是,管理员控制台的行为应该保持不变。如果您对这两个客户端进行了更改,并且您将它们用于其他目的,请谨慎操作。
Keycloak JavaScript 适配器现在是独立的
Keycloak JavaScript 适配器现在是一个独立的库,因此不再从 Keycloak 服务器静态提供。目标是将库与 Keycloak 服务器分离,以便可以独立地重构库,简化代码并在将来更易于维护。此外,该库现在没有第三方依赖关系,这使其更轻量级,更易于在不同的环境中使用。
有关更改的完整细分,请参阅 升级指南。
主机名 v1 功能已删除
已删除过时的主机名 v1 功能。此功能在 Keycloak 25 中被弃用,并被主机名 v2 取代。如果您仍在使用此功能,则必须迁移到主机名 v2。有关更多详细信息,请参阅 配置主机名 (v2) 和 初始迁移指南。
从根目录到相对路径的自动重定向
当指定 http-relative-path
属性时,用户会自动重定向到 Keycloak 托管的路径。这意味着当将相对路径设置为 /auth
时,用户访问 localhost:8080/
,页面会重定向到 localhost:8080/auth
。
当指定 http-management-relative-path
或 http-relative-path
属性时,管理界面也是如此。
它改善了用户体验,因为用户不再需要显式地将相对路径设置为 URL。
客户端策略中的客户端属性条件
基于客户端属性的条件已添加到客户端策略中。您可以使用条件来指定具有指定值的指定客户端属性的客户端。如客户端策略文档中所述,在评估此条件时可以使用 AND 或 OR 条件。
非常感谢 Yoshiyuki Tabata 的贡献。
为日志处理程序指定不同的日志级别
可以为所有可用的日志处理程序指定日志级别,例如 console
、file
或 syslog
。更细粒度的方案提供了控制整个应用程序日志记录的能力,并可以根据您的需求进行调整。
有关更多信息,请参阅 日志记录指南。
添加了选项 proxy-trusted-addresses
当 proxy-headers
选项设置为指定信任的代理地址的白名单时,可以使用 proxy-trusted-addresses
。如果给定请求的代理地址不可信,则不会使用相应的代理标头值。
添加了选项 proxy-protocol-enabled
proxy-protocol-enabled
选项控制服务器是否应该在从代理后面提供请求时使用 HA PROXY 协议。当设置为 true 时,返回的远程地址将是来自实际连接客户端的地址。
添加了重新加载信任和密钥材料的选项
可以设置 https-certificates-reload-period
选项来定义 https-* 选项引用的密钥库、信任库和证书文件的重新加载周期。使用 -1 禁用重新加载。默认为 1h(一小时)。
java-keystore
密钥提供程序支持更多算法和保管库机密
java-keystore
密钥提供程序允许从外部 java 密钥库文件加载领域密钥,它已被修改以管理所有 Keycloak 算法。此外,密钥库和密钥机密(用于从存储库中检索实际密钥)可以使用 保管库 进行配置。因此,Keycloak 领域可以将任何密钥外部化为加密文件,而不会在数据库中存储敏感数据。
有关此主题的更多信息,请参阅 配置领域密钥。
添加对 ECDH-ES 加密密钥管理算法的支持
现在 Keycloak 允许将 ECDH-ES、ECDH-ES+A128KW、ECDH-ES+A192KW 或 ECDH-ES+A256KW 配置为客户端的加密密钥管理算法。使用椭圆曲线 Diffie-Hellman 瞬态静态 (ECDH-ES) 的密钥协商规范为 JWT 引入了三个新的标头参数:epk
、apu
和 apv
。当前 Keycloak 实现仅管理强制的 epk
,而另外两个(可选)从未添加到标头中。有关这些算法的更多信息,请参阅 JSON Web 算法 (JWA)。
此外,新的密钥提供程序 ecdh-generated
可用于生成领域密钥,并且 Java KeyStore 提供程序中添加了对 ECDH 算法的支持。
非常感谢 Justin Tay 的贡献。
支持在领域中使用多个社交代理实例
现在可以在一个领域中拥有多个相同社交代理的实例。
大多数时候,一个领域不需要多个相同社交代理的实例。但由于引入了 organization
功能,因此应该可以将同一社交代理的不同实例链接到不同的组织。
创建社交代理时,现在应该像任何其他代理一样提供一个 Alias
,并可以选择提供一个 Display name
。
用于凭据的新通用事件类型
现在有用于更新 (UPDATE_CREDENTIAL
) 和删除 (REMOVE_CREDENTIAL
) 凭据的通用事件。凭据类型在事件的 credential_type
属性中描述。新的事件类型受电子邮件事件侦听器支持。
以下事件类型现已过时,将在未来版本中删除:UPDATE_PASSWORD
、UPDATE_PASSWORD_ERROR
、UPDATE_TOTP
、UPDATE_TOTP_ERROR
、REMOVE_TOTP
、REMOVE_TOTP_ERROR
登录主题中的可自定义页脚
base/login
和 keycloak.v2/login
主题中的 template.ftl
文件现在允许自定义登录框的页脚。这可用于显示常用链接或在页面末尾包含自定义脚本。
新的 footer.ftl
模板提供了一个 content
宏,它在“登录框”的底部呈现。
KeycloakRealmImport CR 支持占位符替换
KeycloakRealmImport CR 现在公开 spec.placeholders
以创建用于在导入中替换占位符的环境变量。
有关更多详细信息,请参阅 操作员领域导入。
Infinispan 序列化更改为 Infinispan Protostream
序列化是将 Java 对象转换为字节以在 Keycloak 服务器之间跨网络发送它们的进程。在 Keycloak 26 中,我们将序列化格式从 JBoss 序列化更改为 Infinispan Protostream。
JBoss 序列化和 Infinispan Protostream 彼此不兼容,使用不当可能会导致数据丢失。因此,升级到此版本时会清除所有缓存。 |
Infinispan Protostream 基于 协议缓冲区 (proto 3),它具有向后/向前兼容的优点。
删除领域时不再触发与组相关的事件
为了提高组的可扩展性,现在在删除领域时直接从数据库中删除组。因此,在删除领域时不再触发与组相关的事件,例如 GroupRemovedEvent
。
有关如何迁移的信息,请参阅 升级指南。
身份提供者不再从领域表示中提供
作为对 realm 和组织在拥有众多身份提供者时的可扩展性改进的一部分,realm 表示不再包含身份提供者列表。但是,在导出 realm 时,它们仍然可以通过 realm 表示获取。
有关如何迁移的信息,请参阅 升级指南。
安全应用程序文档转换为指南格式
安全应用程序和服务文档已转换为与先前版本中转换的服务器安装和配置文档类似的新格式。该文档现在可在Keycloak 指南中找到。
Keycloak 25.0.0
账户控制台 v2 主题已删除
账户控制台 v2 主题已从 Keycloak 中删除。该主题在 Keycloak 24 中被弃用,并被账户控制台 v3 主题取代。如果您仍在使用该主题,则应迁移到账户控制台 v3 主题。
大多数 Java 适配器已删除
正如先前 Keycloak 版本的发布说明中所述,大多数 Java 适配器现在已从 Keycloak 代码库和下载页面中删除。
对于 OAuth 2.0/OIDC,这包括删除 Tomcat 适配器、WildFly/EAP 适配器、Servlet 过滤器适配器、KeycloakInstalled
桌面适配器、jaxrs-oauth-client
适配器、JAAS 登录模块、Spring 适配器和 SpringBoot 适配器。您可以查看我们之前的文章以了解一些替代方案的列表。
对于 SAML,这包括删除 Tomcat 适配器和 Servlet 过滤器适配器。SAML 适配器仍然支持 WildFly 和 JBoss EAP。
通用的授权客户端库仍然受支持,我们仍然计划支持它。它的目标是与任何其他 OAuth 2.0 或 OpenID Connect 库结合使用。您可以查看快速入门,了解使用授权客户端库与第三方 Java 适配器(如 Elytron OIDC 或 SpringBoot)结合使用的示例。您还可以查看快速入门中有关使用 WildFly 的 SAML 适配器示例。
升级到 PatternFly 5
在 Keycloak 24 中,欢迎页面已更新为使用PatternFly 5,这是 Keycloak 用户界面基础设计系统的最新版本。在此版本中,管理控制台和账户控制台也已更新为使用 PatternFly 5。如果您想扩展和自定义管理控制台和账户控制台,请查看PatternFly 5 中的更改,并相应地更新您的自定义项。
Argon2 密码哈希
Argon2 现在是 Keycloak 在非 FIPS 环境中使用的默认密码哈希算法。
Argon2 是2015 年密码哈希竞赛的获胜者,并且是OWASP 推荐的哈希算法。
在 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 的算法,例如pbkdf2-sha512
。否则,用户在切换到 FIPS 环境后将无法登录。
新的主机名选项
为了应对先前主机名配置设置所带来的复杂性和缺乏直观性,我们很荣幸地推出主机名 v2 选项。
我们倾听了您的反馈,解决了棘手的问题,并为管理主机名配置创造了更流畅的体验。请注意,即使这些选项背后的行为也已发生变化,并且需要您注意 - 如果您正在处理自定义主机名设置。
主机名 v2 选项默认支持,因为旧的主机名选项已弃用,将在接下来的版本中删除。您应尽快迁移到它们。
新选项默认激活,因此 Keycloak 不会识别旧选项。
有关如何迁移的信息,请参阅 升级指南。
持久用户会话
先前版本的 Keycloak 仅将离线用户和离线客户端会话存储在数据库中。新功能persistent-user-sessions
不仅将在线用户会话和在线客户端会话存储在内存中,还存储在数据库中。这将允许用户即使 Keycloak 的所有实例都重新启动或升级,也能保持登录状态。
该功能是一个预览功能,默认情况下处于禁用状态。要使用它,请将以下内容添加到您的构建命令中
bin/kc.sh build --features=persistent-user-sessions ...
有关如何升级的信息,请参阅 升级指南。
Cookie 更新
为所有 Cookie 设置 SameSite 属性
以下 Cookie 以前未使用过SameSite
属性,这在最近的浏览器版本中会导致它们默认使用SameSite=Lax
-
KC_STATE_CHECKER
现在设置SameSite=Strict
-
KC_RESTART
现在设置SameSite=None
-
KEYCLOAK_LOCALE
现在设置SameSite=None
-
KEYCLOAK_REMEMBER_ME
现在设置SameSite=None
默认值SameSite=Lax
会导致基于 POST 的绑定出现问题,这主要适用于 SAML,但也用于一些 OpenID Connect/OAuth 2.0 流。
已弃用的 Cookie 方法已删除
以下用于设置自定义 Cookie 的 API 已被删除
-
ServerCookie
- 已被NewCookie.Builder
取代 -
LocaleSelectorProvider.KEYCLOAK_LOCALE
- 已被CookieType.LOCALE
取代 -
HttpCookie
- 已被NewCookie.Builder
取代 -
HttpResponse.setCookieIfAbsent(HttpCookie cookie)
- 已被HttpResponse.setCookieIfAbsent(NewCookie cookie)
取代
解决了针对已过期的身份验证会话的“您已登录”问题
Keycloak 23 版本提供了当用户在多个浏览器选项卡中并行进行身份验证时的改进。但是,此改进并未解决身份验证会话过期的情况。现在,对于用户已在一个浏览器选项卡中登录,而在其他浏览器选项卡中身份验证会话已过期的情况,Keycloak 能够使用 OIDC/SAML 错误重定向回客户端应用程序,以便客户端应用程序可以立即重试身份验证,这通常会自动登录应用程序,因为 SSO 会话的存在。有关更多详细信息,请参阅服务器管理指南身份验证会话。
轻量级访问令牌变得更加轻量级
在以前的版本中,添加了对轻量级访问令牌的支持。在此版本中,我们设法从轻量级访问令牌中删除了更多内置声明。这些声明是由协议映射器添加的。其中一些甚至会影响常规访问令牌或 ID 令牌,因为它们不是 OIDC 规范严格要求的。
-
声明
sub
和auth_time
现在由协议映射器添加,这些映射器默认配置在新的客户端范围basic
上,该范围会自动添加到所有客户端。这些声明仍然像以前一样添加到 ID 令牌和访问令牌中,但不会添加到轻量级访问令牌中。 -
声明
nonce
现在仅添加到 ID 令牌。它不会添加到常规访问令牌或轻量级访问令牌。为了向后兼容,您可以通过协议映射器将此声明添加到访问令牌中,该映射器需要显式配置。 -
声明
session_state
现在不会添加到任何令牌中。如果需要,仍然可以通过协议映射器添加它。规范仍然支持另一个专用声明sid
,该声明在先前版本中也可用,并且具有完全相同的值。
有关更多详细信息,请参阅升级指南。
在令牌自省端点中支持 application/jwt 媒体类型
在调用令牌自省端点时,您可以使用 HTTP 标头Accept: application/jwt
。当为特定客户端启用时,它会从令牌自省端点返回一个声明jwt
,其中包含完整的 JWT 访问令牌,这对于客户端调用自省端点使用轻量级访问令牌的用例尤其有用。感谢Thomas Darimont 的贡献。
必需操作改进
在管理控制台中,您现在可以在特定领域的“必需操作”选项卡中配置一些必需操作。目前,**更新密码**是唯一内置的可配置必需操作。它支持设置**身份验证最大期限**,即用户在未重新验证的情况下(例如,在更新帐户控制台中的密码时)通过 `kc_action` 参数(用于实例)更新密码的最大时间。必需操作的排序也得到了改进。当身份验证期间有多个必需操作时,所有操作将一起排序,无论这些操作是在身份验证期间设置的(例如,通过 `kc_action` 参数)还是由管理员手动添加到用户帐户的。感谢 Thomas Darimont 和 Daniel Fesenmeyer 的贡献。
通行密钥改进
添加了对通行密钥条件 UI 的支持。当启用通行密钥预览功能时,将提供一个专用身份验证器,这意味着您可以从可用通行密钥帐户列表中进行选择并根据该帐户对用户进行身份验证。感谢 Takashi Norimatsu 的贡献。
SAML 的默认客户端配置文件
添加了默认客户端配置文件以确保 SAML 客户端的安全。在管理控制台中浏览领域的客户端策略时,您将看到一个新的客户端配置文件 `saml-security-profile`。使用它时,将对 SAML 客户端应用安全最佳实践,例如强制执行签名、禁用 SAML 重定向绑定以及禁止通配符重定向 URL。
OpenID 用于可验证凭证签发 - 实验性支持
OpenID 用于可验证凭证签发 (OID4VCI) 的支持正在开发中。目前,这仍然是一个正在进行的工作,但正在逐渐添加内容。Keycloak 可以充当 OID4VC 发行者,支持预授权代码流程。JWT-VC、SD-JWT-VC 和 VCDM 格式的可验证凭证均受支持。感谢 OAuth SIG 小组成员的贡献和反馈,尤其是感谢 Stefan Wiedemann、Francis Pouatcha、Takashi Norimatsu 和 Yutaka Obuchi。
按用户属性搜索不再区分大小写
按用户属性搜索用户时,Keycloak 不再搜索用户属性名称,从而强制执行小写比较。此更改的目的是通过使用 Keycloak 在用户属性表上的本机索引来加快搜索速度。如果您的数据库排序规则不区分大小写,您的搜索结果将保持不变。如果您的数据库排序规则区分大小写,您可能会看到比以前更少的搜索结果。
授权客户端库中的重大修复
对于 `keycloak-authz-client` 库的用户,调用 `AuthorizationResource.getPermissions(…)` 现在会正确地返回一个 `List<Permission>`。
以前,它会在运行时返回一个 `List<Map>`,即使方法声明宣传的是 `List<Permission>`。
此修复程序将破坏依赖于将 List 或其内容强制转换为 `List<Map>` 的代码。如果您在任何情况下使用过此方法,您很可能已经执行过此操作并且会受到影响。
度量和运行状况端点的管理端口
度量和运行状况检查端点不再通过标准 Keycloak 服务器端口访问。由于这些端点应该对外部世界隐藏,因此可以通过单独的默认管理端口 `9000` 访问它们。
它允许在 Kubernetes 环境中不将它公开给用户作为标准 Keycloak 端点。新的管理界面提供了一套新的选项,并且可以完全配置。
Keycloak Operator 假定默认情况下管理界面已打开。有关更多详细信息,请参阅 配置管理界面。
用于远程日志记录的 Syslog
Keycloak 现在支持用于远程日志记录的 Syslog 协议。它使用在 RFC 5424 中定义的协议。默认情况下,syslog 处理程序处于禁用状态,但启用后,它会将所有日志事件发送到远程 syslog 服务器。
有关更多信息,请参阅 配置日志记录 指南。
对类 `EnvironmentDependentProviderFactory` 的更改
方法 `EnvironmentDependentProviderFactory.isSupported()` 已在几个版本中弃用,现在已删除。
有关更多详细信息,请参阅 升级指南。
所有 `cache` 选项都是运行时选项
现在可以在运行时指定 `cache`、`cache-stack` 和 `cache-config-file` 选项。这消除了由于它们而执行构建阶段并重新构建映像的需要。
有关更多详细信息,请参阅 升级指南。
从 `AccessToken`、`IDToken` 和 `JsonWebToken` 类中删除已弃用的方法
在此版本中,我们最终将从以下类中删除已弃用的方法
-
AccessToken
-
IDToken
-
JsonWebToken
有关更多详细信息,请参阅 升级指南。
方法 `getExp` 添加到 `SingleUseObjectKeyModel`
由于从 `AccessToken`、`IDToken` 和 `JsonWebToken` 中删除了已弃用的方法,因此 `SingleUseObjectKeyModel` 也发生了更改,以保持与与到期值相关的函数名的一致性。
有关更多详细信息,请参阅 升级指南。
介绍对客户身份和访问管理 (CIAM) 和多租户的支持
在此版本中,我们正在提供 Keycloak 组织作为一项技术预览功能。
此功能为领域提供了一些核心 CIAM 功能,它将作为将来更多功能的基础,以解决企业对企业 (B2B) 和企业对企业对客户 (B2B2C) 的用例。
就功能而言,该功能已完成。但是,我们仍然需要做一些工作才能在下一个主要版本中使其完全受支持。这项剩余的工作主要是关于为生产部署准备功能,重点是可扩展性。此外,根据我们收到下一个主要版本之前的反馈,我们最终可能会接受其他功能并为该功能增加更多价值,而不会影响其路线图。
有关更多详细信息,请参阅 服务器管理指南。
Keycloak 24.0.4
通过管理用户 API 更新用户时,对用户属性进行部分更新不再受支持
通过管理用户 API 更新用户属性时,您无法在更新用户属性时执行部分更新,包括 `username`、`email`、`firstName` 和 `lastName` 等根属性。
有关更多详细信息,请参阅 升级指南。
Keycloak 24.0.1
运算符部署的是夜间构建,而不是 24.0.0
由于使用运算符部署 Keycloak 时在发布过程中出现问题,因此它安装了 `nightly` 容器,而不是 `24.0.0`。
作为对该问题的快速修复,`24.0.0` 容器已标记为 `nightly`,并且 `nightly` 版本已暂时禁用。
如果您在昨天中欧时间下午 5 点之前使用运算符安装或升级到 `24.0.0`,则数据库可能已使用错误的版本更新。要检查您是否受到影响,请连接到您的数据库并运行以下 SQL 命令
SELECT * from migration_model WHERE version = '999.0.0';
如果以上返回匹配的行,您需要采取一些操作,否则数据库迁移将不会为将来的版本运行。要解决此问题,请运行以下 SQL 命令
UPDATE migration_model SET version = '24.0.0' WHERE version = '999.0.0';
Keycloak 24.0.0
支持的用户配置文件和渐进式配置
用户配置文件预览功能已升级为完全支持,并且用户配置文件默认启用。
在过去几个月里,Keycloak 团队花费了大量精力来完善用户配置文件功能,使其完全受支持。在此版本中,我们继续了这项工作。根据我们出色的社区的全面测试和反馈,进行了许多改进、修复和完善。
以下是此功能的一些亮点;
-
对用户和管理员可以管理的属性进行细粒度控制,以便您可以防止设置意外的属性和值。
-
能够指定哪些用户属性是管理的,并且应该在表单上显示给普通用户或管理员。
-
动态表单 - 以前,用户创建或更新其配置文件的表单包含四个基本属性,例如用户名、电子邮件、姓氏和名字。添加任何属性(或删除一些默认属性)都需要您创建一个自定义主题。现在可能不需要自定义主题,因为用户会根据特定部署的要求看到完全请求的属性。
-
验证 - 能够为用户属性指定验证器,包括您可以用来指定最大或最小长度、特定正则表达式或将特定属性限制为 URL 或数字的内置验证器。
-
注释 - 能够指定应将特定属性渲染为文本区域、带有指定选项的 HTML 选择、日历或许多其他选项。您还可以将 JavaScript 代码绑定到特定字段以更改属性的渲染方式并自定义其行为。
-
渐进式用户画像 - 允许您指定某些字段仅在
scope
参数具有特定值时才在表单中必填或可用。这有效地实现了渐进式用户画像。您不再需要在注册时就向用户询问二十个属性;您可以改为根据用户使用的各个客户端应用程序的要求,逐步向用户询问属性。 -
从旧版本迁移 - 用户画像现在始终启用,但对于未使用此功能的用户来说,其操作方式与以前相同。您可以享受用户画像功能带来的益处,但无需使用它们。有关迁移说明,请参阅升级指南。
用户画像作为支持功能的首次发布仅仅是起点,为提供更多关于身份管理的功能奠定了基础。
我们衷心感谢Keycloak社区的贡献,因为许多想法、需求和贡献都来自社区!特别感谢
有关用户画像功能的更多详细信息,请参阅服务器管理指南。
对用户画像SPI的重大更改
在此版本中,对用户画像SPI的更改可能会影响基于此SPI的现有实现。有关更多详细信息,请参阅升级指南。
对基于用户画像和领域的页面渲染的Freemarker模板的更改
在此版本中,以下模板已更新,以便能够根据为领域设置的用户画像配置动态渲染属性
-
login-update-profile.ftl
-
register.ftl
-
update-email.ftl
有关更多详细信息,请参阅 升级指南。
首次通过代理登录时用于更新用户画像页面的新Freemarker模板
在此版本中,当用户首次通过代理进行身份验证时,服务器将使用idp-review-user-profile.ftl
模板渲染更新用户画像页面。
有关更多详细信息,请参阅 升级指南。
Java适配器弃用和删除
早在2022年,我们就宣布了在Keycloak 19中弃用Keycloak适配器。为了给社区更多时间采用,这项计划被推迟了。
考虑到这一点,这将是Keycloak的最后一个包含OpenID Connect和SAML适配器的主要版本。由于Jetty 9.x自2022年以来一直不受支持,因此Jetty适配器已在此版本中被删除。
通用授权客户端库将继续得到支持,旨在与任何其他OAuth 2.0或OpenID Connect库结合使用。
我们将继续提供的唯一适配器是适用于最新版本WildFly和EAP 8.x的SAML适配器。继续支持此适配器的原因是,Keycloak中大部分SAML代码库来自WildFly的贡献。作为这项贡献的一部分,我们同意长期维护WildFly和EAP的SAML适配器。
新的欢迎页面
首次使用Keycloak时出现的“欢迎”页面已重新设计。它提供了更好的设置体验,并符合最新版本的PatternFly。简化的页面布局仅包含一个用于注册第一个管理用户的表单。完成注册后,用户将直接被发送到管理控制台。
如果您使用的是自定义主题,您可能需要更新它以支持新的欢迎页面。有关详细信息,请参阅升级指南。
新的账户控制台现已成为默认控制台
我们在Keycloak 22中以预览功能的形式引入了第3版账户控制台。在此版本中,我们将它设置为默认版本,并在此过程中弃用了第2版,第2版将在后续版本中被删除。
这个新版本内置支持用户画像功能,允许管理员配置账户控制台中可供用户使用的属性,并在用户登录后直接将其带到他们的个人账户页面。
如果您使用或扩展了此主题的自定义功能,您可能需要执行其他迁移操作。有关更多详细信息,请参阅升级指南。
Keycloak JS
默认情况下启用PKCE
Keycloak JS适配器现在默认情况下将pkceMethod
选项设置为S256
。此更改为使用适配器的所有应用程序启用了Proof Key Code Exchange(PKCE)。如果您在不支持PKCE的系统上使用适配器,您可以将pkceMethod
选项设置为false
以禁用它。
对密码散列的更改
在此版本中,我们调整了密码散列默认值,以符合OWASP密码存储建议。
作为此更改的一部分,默认密码散列提供程序已从pbkdf2-sha256
更改为pbkdf2-sha512
。此外,基于pbkdf2
的密码散列算法的默认散列迭代次数也有所改变。此更改意味着更符合最新建议的安全性,但会影响性能。通过在您的领域中添加密码策略hashAlgorithm
和hashIterations
,您可以保持旧的行为。有关更多详细信息,请参阅升级指南。
与OAuth/OIDC相关的改进
轻量级访问令牌支持
此版本包含对轻量级访问令牌的支持。因此,您可以为指定的客户端提供更小的访问令牌。这些令牌只包含几个声明,因此它们更小。请注意,轻量级访问令牌默认情况下仍由领域密钥签署的JWT,并且仍然包含一些非常基本的声明。
此版本引入了一个**添加到轻量级访问令牌**标志,它在某些OIDC协议映射器上可用。使用此标志指定是否应将特定声明添加到轻量级访问令牌中。它默认情况下为**关闭**,这意味着大多数声明都不会被添加。
此外,还存在一个客户端策略执行器。使用它来指定特定客户端请求是否应该使用轻量级访问令牌或常规访问令牌。执行器的替代方法是使用客户端高级设置中的**始终使用轻量级访问令牌**标志,这将导致该客户端始终使用轻量级访问令牌。如果您需要更多灵活性,执行器可以作为替代方法。例如,您可能选择默认使用轻量级访问令牌,但仅针对指定的**scope**参数使用常规令牌。
之前的版本添加了一个**添加到令牌自省**开关。您使用它将不在访问令牌中存在的声明添加到自省端点响应中。
感谢Shigeyuki Kabano的贡献,并感谢Takashi Norimatsu对这项功能的帮助和审查。
OAuth 2.1支持
此版本包含可选的OAuth 2.1支持。此版本中引入了新的客户端策略配置文件,管理员可以使用它们来确保客户端和特定客户端请求符合OAuth 2.1规范。为机密客户端和公开客户端提供了一个专门的客户端配置文件。感谢Takashi Norimatsu和Shigeyuki Kabano的贡献。
在刷新令牌流中支持scope参数
从这个版本开始,支持OAuth2/OIDC端点中用于令牌刷新的**scope**参数。使用此参数请求具有比最初授予的更少范围的访问令牌,这意味着您无法增加访问令牌的范围。此范围限制不影响已刷新的刷新令牌的范围。此功能按OAuth2规范中所述的方式工作。感谢Konstantinos Georgilakis的贡献。
用于安全重定向URI的客户端策略执行器
引入了一个新的客户端策略执行器secure-redirect-uris-enforcer
。使用它来限制客户端可以使用哪些重定向URI。例如,您可以指定客户端重定向URI不能包含通配符,应该只来自特定域,必须符合OAuth 2.1,等等。感谢Lex Cao和Takashi Norimatsu的贡献。
用于强制执行DPoP的客户端策略执行器
引入了一个新的客户端策略执行器dpop-bind-enforcer
。如果启用了dpop
预览,您可以使用它来强制执行特定客户端的DPoP。感谢Takashi Norimatsu的贡献。
支持EdDSA
您可以创建EdDSA领域密钥,并将它们用作各种客户端的签名算法。例如,您可以使用这些密钥来签署令牌或用于使用已签名的JWT进行客户端身份验证。此功能包括身份代理,其中Keycloak本身签署用于private_key_jwt
身份验证到第三方身份提供者的客户端断言。感谢Takashi Norimatsu和Muhammad Zakwan Bin Mohd Zahid的贡献。
JavaKeystore提供程序支持EC密钥
用于提供领域密钥的提供程序JavaKeystoreProvider
现在除了以前支持的RSA密钥外,还支持EC密钥。感谢Stefan Wiedemann的贡献。
使用私钥签署的JWT进行身份验证时,将X509指纹添加到JWT的选项
OIDC身份提供者现在为使用私钥签署的JWT进行客户端身份验证的情况提供了**将X.509标头添加到JWT**选项。此选项对于与某些身份提供者(例如Azure AD)的互操作性可能很有用,Azure AD要求指纹存在于JWT中。感谢MT的贡献。
OAuth授权类型SPI
Keycloak代码库包含一项内部更新,以引入OAuth授权类型SPI。此更新允许在引入Keycloak OAuth 2令牌端点支持的自定义授权类型时提供额外的灵活性。感谢Dmitry Telegin的贡献。
CORS改进
与CORS相关的Keycloak功能已提取到SPI中,这可以提供额外的灵活性。请注意,CorsSPI
是内部的,可能会在将来的版本中发生更改。感谢Dmitry Telegin的贡献。
信任库改进
Keycloak 引入了改进的信任库配置选项。Keycloak 信任库现在用于整个服务器,包括传出连接、mTLS 和数据库驱动程序。您不再需要为各个区域配置单独的信任库。要配置信任库,您可以将信任库文件或证书放在默认的 conf/truststores
中,或者使用新的 truststore-paths
配置选项。有关详细信息,请参阅相关指南。
版本化功能
功能现在支持版本控制。为了保持向后兼容性,所有现有的功能(包括 account2
和 account3
)都被标记为版本 1。新引入的功能将使用版本控制,这意味着用户可以选择所需功能的不同实现。
有关详细信息,请参阅功能指南。
SAML 身份提供者的自动证书管理
SAML 身份提供者现在可以配置为自动从 IDP 实体元数据描述符端点下载签名证书。为了使用新功能,请在提供者中配置 Metadata descriptor URL
选项(发布证书的 IDP 元数据信息的 URL),并将 Use metadata descriptor URL
设置为 ON
。证书会从该 URL 自动下载并缓存在 public-key-storage
SPI 中。还可以使用提供者页面中的操作组合,从管理控制台重新加载或导入证书。
有关新选项的更多详细信息,请参阅文档。
用于负载均衡器的非阻塞健康检查
添加了一个新的健康检查端点,位于 /lb-check
。执行在事件循环中运行,这意味着即使在 Keycloak 需要处理请求队列中许多请求的负载过重的情况下,此检查也是响应的。例如,在多站点部署中,此行为有助于避免故障转移到负载过重的另一个站点。该端点目前正在检查嵌入式和外部 Infinispan 缓存的可用性。以后可能会添加其他检查。
此端点默认不可用。要启用它,请使用 multi-site
功能运行 Keycloak。有关详细信息,请参阅启用和禁用功能。
Keycloak CR 优化字段
Keycloak CR 现在包含一个 startOptimized
字段,可用于覆盖关于是否为启动命令使用 --optimized
标志的默认假设。因此,即使使用自定义 Keycloak 镜像,您也可以使用 CR 配置构建时间选项。
对管理员 API 和帐户上下文中的用户表示的更改
在此版本中,我们通过将根用户属性(如 username
、email
、firstName
、lastName
和 locale
)移动到一个基础/抽象类来封装它们,以使使用管理员和帐户 REST API 时这些属性的编组和解组方式保持一致。
此策略确保了客户端管理属性的方式的一致性,并确保它们符合设置为领域的配置文件。
有关更多详细信息,请参阅 升级指南。
对电子邮件验证流程的更改
在此版本中,如果用户尝试按照链接验证电子邮件,并且之前已验证电子邮件,则会显示一条适当的消息。
除此之外,还会触发一个新的错误 (EMAIL_ALREADY_VERIFIED
) 事件,以指示尝试验证已验证的电子邮件。您可以使用此事件来跟踪在链接泄露的情况下可能存在劫持用户帐户的企图,或者在用户不认识该操作时提醒用户。
已弃用的离线会话预加载
Keycloak 的默认行为是在需要时加载离线会话。在启动时预加载它们的旧行为现在已弃用,因为在启动时预加载它们在会话数量不断增加的情况下无法很好地扩展,并且会增加 Keycloak 的内存使用量。旧行为将在将来的版本中删除。
有关更多详细信息,请参阅 升级指南。
用于离线会话在内存中生存期覆盖的配置选项
为了减少内存需求,我们引入了一个配置选项来缩短导入到 Infinispan 缓存中的离线会话的生存期。目前,离线会话生存期覆盖默认情况下处于禁用状态。
有关详细信息,请参阅服务器管理指南。
暴力破解保护更改
暴力破解保护进行了一些增强
-
如果由于暴力破解保护,使用 OTP 或恢复代码进行身份验证的尝试失败,则活动身份验证会话将失效。任何进一步使用该会话进行身份验证的尝试都将失败。
-
在以前的 Keycloak 版本中,管理员必须在禁用用户是暂时禁用还是永久禁用之间进行选择,原因是攻击者对用户帐户的暴力破解攻击。管理员现在可以在用户帐户被暂时锁定一定次数后永久禁用该用户。
-
failedLoginNotBefore
属性已添加到brute-force/users/{userId}
端点
授权策略
在以前的 Keycloak 版本中,如果用户、组或客户端策略的最后一个成员被删除,则该策略也将被删除。不幸的是,这会导致特权升级,如果策略用于聚合策略。为了避免特权升级,效果策略将不再被删除,管理员需要更新这些策略。
Keycloak CR 缓存配置文件选项
Keycloak CR 现在允许使用 cache
spec configMapFile
字段指定 cache-config-file
选项,例如
apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
name: example-kc
spec:
...
cache:
configMapFile:
name: my-configmap
key: config.xml
Keycloak CR 资源选项
Keycloak CR 现在允许为管理 Keycloak 容器的计算资源指定 resources
选项。它提供了通过 Keycloak CR 为主要 Keycloak 部署独立请求和限制资源,以及通过 Realm 导入 CR 为领域导入作业请求和限制资源的能力。
当未指定任何值时,默认的 requests
内存设置为 1700MiB
,limits
内存设置为 2GiB
。
您可以根据自己的要求指定自定义值,如下所示
apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
name: example-kc
spec:
...
resources:
requests:
cpu: 1200m
memory: 896Mi
limits:
cpu: 6
memory: 3Gi
有关详细信息,请参阅Operator 高级配置。
临时锁定日志被事件取代
当用户因暴力破解保护器而被暂时锁定时,现在会出现一个新的事件 USER_DISABLED_BY_TEMPORARY_LOCKOUT
。已删除 ID 为 KC-SERVICES0053
的日志,因为新事件以结构化形式提供信息。
有关更多详细信息,请参阅 升级指南。
对 cookie 的更新
cookie 处理代码已重构和改进,包括一个新的 Cookie 提供者。这为 Keycloak 处理的 cookie 提供了更好的一致性,以及在需要时引入有关 cookie 的配置选项的能力。
用于 NameID 的 SAML 用户属性映射器现在仅建议有效的 NameID 格式
用于 NameID 的用户属性映射器允许将 Name ID Format
选项设置为以下值
-
urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName
-
urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName
-
urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos
-
urn:oasis:names:tc:SAML:2.0:nameid-format:entity
但是,Keycloak 不支持接收包含其中一个 NameIDPolicy
的 AuthnRequest
文档,因此这些映射器将永远不会被使用。支持的选项已更新,仅包含以下 Name ID 格式
-
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
-
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
-
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
-
urn:oasis:names:tc:SAML:2.0:nameid-format:transient
在容器中运行时,不同的 JVM 内存设置
Keycloak 不再为初始堆大小和最大堆大小指定硬编码值,而是使用相对于容器总内存的相对值。JVM 选项 -Xms
和 -Xmx
被 -XX:InitialRAMPercentage
和 -XX:MaxRAMPercentage
替换。
这可能会显着影响内存使用量,因此可能需要执行某些操作。 |
有关更多详细信息,请参阅 升级指南。
GELF 日志处理程序已弃用
随着提供与 GELF 集成的基础库的停用,Keycloak 将不再开箱即用地支持 GELF 日志处理程序。此功能将在将来的版本中删除。如果您需要外部日志管理,请考虑使用文件日志解析。
支持多站点活动-被动部署
将 Keycloak 部署到多个独立站点对于某些环境至关重要,以便提供高可用性和快速恢复故障。此版本支持 Keycloak 的活动-被动部署。
要开始使用,请使用高可用性指南,其中还包括一个综合蓝图,用于将高可用性 Keycloak 部署到云环境。
Keycloak 23.0.0
OpenID Connect / OAuth 2.0
FAPI 2 草案支持
Keycloak 现在有了新的客户端配置文件 fapi-2-security-profile
和 fapi-2-message-signing
,它们确保 Keycloak 在与您的客户端通信时强制执行最新 FAPI 2 草案规范。感谢 Takashi Norimatsu 的贡献。
DPoP 预览支持
Keycloak 预览支持 OAuth 2.0 在应用程序层演示证明拥有权 (DPoP)。感谢 Takashi Norimatsu 和 Dmitry Telegin 的贡献。
自省端点更多灵活性
在以前版本中,自省端点会自动返回访问令牌中可用的多数声明。现在,大多数协议映射器都包含一个新的 添加到令牌自省
开关。此新增功能提供了更多灵活性,因为自省端点可以返回与访问令牌不同的声明。此更改是实现“轻量级访问令牌”支持的第一步,因为访问令牌可以省略许多声明,而这些声明仍将由自省端点返回。从以前的版本迁移时,自省端点应返回与访问令牌返回的相同的声明,因此,在迁移后,默认情况下,行为应保持有效地相同。感谢 Shigeyuki Kabano 的贡献。
OAuth 2.0 设备授权授予流的特性标志
OAuth 2.0 设备授权授予流现在包含一个特性标志,因此您可以轻松地禁用此功能。此功能默认情况下仍处于启用状态。感谢 Thomas Darimont 的贡献。
身份验证
Passkeys 支持
Keycloak 预览支持 Passkeys.
Passkey 注册和身份验证是通过 WebAuthn 的功能实现的。因此,Keycloak 的用户可以通过现有的 WebAuthn 注册和身份验证来进行 Passkey 注册和身份验证。
同步的 Passkeys 和设备绑定的 Passkeys 都可以用于同一设备和跨设备身份验证。但是,Passkeys 操作成功与否取决于用户的环境。请确保哪些操作可以在 该环境 中成功。感谢 Takashi Norimatsu 的贡献,以及感谢 Thomas Darimont 在这个功能的理念和测试方面提供的帮助。
WebAuthn 改进
WebAuthn 策略包含一个新字段:额外来源
。它提供了与非 Web 平台(例如,原生移动应用程序)更好的互操作性。感谢 Charley Wu 的贡献。
您已登录
此版本解决了当用户在一个浏览器选项卡中打开登录页面并在另一个浏览器选项卡中进行身份验证时出现的问题。当用户尝试在另一个浏览器选项卡中进行身份验证时,会出现一条消息:您已登录
。现在,这种情况已得到改进,因为在第一个选项卡中进行身份验证后,其他浏览器选项卡会自动对用户进行身份验证。但是,仍然需要进一步改进。例如,当身份验证会话过期并在一个浏览器选项卡中重新启动时,其他浏览器选项卡不会自动遵循登录操作。
用于指定最大身份验证时间的密码策略
Keycloak 支持一项新的密码策略,该策略允许您指定用户在无需重新身份验证的情况下可以更改密码的身份验证的最大时间。当此密码策略设置为 0 时,用户需要重新身份验证才能在帐户控制台或通过其他方式更改密码。您还可以指定低于或高于默认值 5 分钟的值。感谢 Thomas Darimont 的贡献。
部署
对多站点主动-被动部署的预览支持
在某些环境中,将 Keycloak 部署到多个独立的站点对于提供高可用性和快速恢复故障至关重要。此版本添加了对 Keycloak 的主动-被动部署的预览支持。
大量工作都投入到了测试和验证一个可以承受负载并在故障情况下恢复的设置中。要开始使用,请使用 高可用性指南,该指南还包含一个综合蓝图,用于将高可用性 Keycloak 部署到云环境。
适配器
OpenID Connect WildFly 和 JBoss EAP
在以前版本中已弃用的 WildFly 和 JBoss EAP 的 OpenID Connect 适配器已在此版本中删除。它已被 Elytron OIDC 适配器取代,该适配器包含在 WildFly 中,并提供从 Keycloak 适配器进行无缝迁移。
SAML WildFly 和 JBoss EAP
WildFly 和 JBoss EAP 的 SAML 适配器不再作为 ZIP 下载发布,而是作为 Galleon 功能包发布,这使得安装更容易和更无缝。
有关详细信息,请参阅 保护应用程序指南。
服务器分发
负载卸载支持
Keycloak 现在具有 http-max-queued-requests
选项,允许在高负载下适当地拒绝传入请求。有关详细信息,请参阅 生产指南。
组可扩展性
针对包含许多组和子组的使用场景,对组搜索的性能进行了改进。有一些改进,允许分页查找子组。感谢 Alice 的贡献。
Keycloak 22.0.3
通过模板注册或更新用户时的安全漏洞
Keycloak 22.0.2 中引入了安全漏洞。我们强烈建议不要升级到 22.0.2,并且对于已在生产环境中部署了 22.0.2 的任何用户,请立即升级到 22.0.3。
对于在将 Keycloak 升级到 22.0.2 后自我注册的用户,他们的密码未安全存储,并且可能暴露给 Keycloak 管理员。这只会影响在升级发布后注册的用户,不会影响以前注册的任何用户。
任何使用预览版声明式用户资料的领域都不会受到此问题的影响,只有使用默认用户资料提供者的领域才会受到影响。
要确定您的部署中是否有任何受影响的用户,您可以通过访问数据库并运行以下 SQL 语句来查询它们
SELECT DISTINCT U.ID, U.USERNAME, U.EMAIL, U.REALM_ID FROM USER_ENTITY U
INNER JOIN USER_ATTRIBUTE UA ON U.ID = UA.USER_ID
WHERE UA.NAME IN ('password','password-confirm')
我们建议联系所有受影响的用户,并为他们添加“需要更新密码”操作。
如果存在任何受影响的用户,我们还建议通过运行以下 SQL 语句从数据库中删除这些属性
DELETE FROM USER_ATTRIBUTE UA WHERE UA.NAME IN ('password','password-confirm')
如果在 22.0.2 版本发布后对数据库进行了任何备份,并且存在受影响的用户,我们建议删除这些备份。
自定义用户存储提供者
如果提供者委托给 Keycloak 存储用户属性,任何具有自定义用户存储联合提供者的部署也可能受到影响,请验证您的自定义用户存储以确定这是否是问题。
要确定您的部署中是否有任何受影响的联合用户,您可以通过访问数据库并运行以下 SQL 语句来查询它们
SELECT DISTINCT USER_ID,REALM_ID,STORAGE_PROVIDER_ID FROM FED_USER_ATTRIBUTE
WHERE NAME IN ('password','password-confirm')
如果存在任何受影响的联合用户,我们还建议通过运行以下 SQL 语句从数据库中删除这些属性
DELETE FROM FED_USER_ATTRIBUTE UA WHERE UA.NAME IN ('password','password-confirm')
如果您的自定义用户存储提供者本身管理属性,则应查看您的自定义存储以删除 password
和 password-confirm
属性。
Keycloak 22.0.0
服务器分发
升级到 Quarkus 3.x
Keycloak 升级到 Quarkus Java 框架的 3.2.0.Final 版本。Quarkus 3.x 延续了推动 Java 开发的传统,以最快的速度前进,并通过最新技术提供尖端的用户体验。
升级到 Hibernate ORM 6
Keycloak 现在得益于升级到 Hibernate ORM 6.2,这带来了性能提升、更优化的 SQL、现代 JDK 支持以及对现代 RDBMS 特性的支持。
添加 KeyStore 配置源
与 KeyStore Vault 新闻相关,我们还集成了 Quarkus 最近发布的功能,称为 KeyStore 配置源。这意味着在现有的配置源(CLI 参数、环境变量和文件)中,您现在可以通过存储在 Java 密钥库文件中的配置属性来配置您的 Keycloak 服务器。您可以在配置指南中了解有关此功能的更多信息。
管理控制台
帐户控制台模板变量移除
暴露给帐户控制台 V2 和 V3 模板的两个变量 (isEventsEnabled
和 isTotpConfigured
) 未被使用,并且在本版本中已移除。
如果开发人员扩展了帐户控制台主题,则可能会使用这些变量。因此,如果您正在扩展基本主题,请确保不再使用这些变量。
自定义管理控制台消息的更改
管理控制台(以及很快的新帐户控制台)在解析国际化消息的键方面的工作方式与 Keycloak 的其他部分略有不同。这是因为它使用i18next库进行国际化。因此,在为“领域设置”➡“本地化”下的管理控制台定义自定义消息时,必须考虑 i18next 的最佳实践。具体而言,在为管理控制台定义消息时,在消息键中指定命名空间非常重要。
例如,假设我们要覆盖在创建新领域时向用户显示的welcome
消息。此消息位于dashboard
命名空间中,与包含消息的原始文件的名称相同 (dashboard.json
)。如果我们要覆盖此消息,则必须使用命名空间作为前缀,后跟冒号分隔的消息键,在本例中将变为dashboard:welcome
。
JavaScript 适配器
移除旧版 Promise API
在本版本中,我们从 Keycloak JS 适配器中移除了旧版 Promise API 方法。这意味着不再可以在适配器返回的 Promise 上调用.success()
和 .error()
。
需要使用new
运算符实例化
在之前的版本中,当 Keycloak JS 适配器在没有new
运算符的情况下构建时,我们开始积极地记录弃用警告。从本版本开始,这样做将抛出异常。这是为了与JavaScript 类的预期行为保持一致,这将允许将来进一步重构适配器。
管理 API
运算符
k8s.keycloak.org/v2alpha1 更改
keycloak.status 中提供了其他字段来帮助 keycloak 成为可扩展的资源。还有一些其他字段可以使状态更易于解释,例如 observedGeneration 和 condition observedGeneration 以及 lastTransitionTime 字段。
condition 状态字段已从布尔值更改为字符串,以符合标准 Kubernetes 条件。在 CRD 中,它将暂时表示为接受任何内容,但它将始终只是一个字符串。请确保您对该字段的任何使用都更新为期望值 “True”、“False” 或 “Unknown”,而不是 true 或 false。
身份代理
OpenID Connect 身份提供程序中的基本声明配置
OpenID Connect 身份提供程序支持一种新的配置,用于指定身份提供程序发出的 ID 令牌必须包含特定声明,否则用户无法通过此代理进行身份验证。
此选项默认情况下处于禁用状态;启用后,您可以指定要过滤的 JWT 令牌声明的名称以及要匹配的值(支持正则表达式格式)。
OpenID Connect 提供程序中对 JWE 加密 ID 令牌和用户信息响应的支持
OpenID Connect 提供程序现在支持Json Web Encryption (JWE),用于 ID 令牌和用户信息响应。提供程序使用为所选加密算法定义的领域密钥来执行解密。
Keycloak 21.1.0
单体仓库
过去,Keycloak 在多个 GitHub 存储库中维护。
拥有多个存储库带来了很多复杂性和工作量。例如,通常需要向不同的存储库发送多个拉取请求才能进行单个更改。
为了简化流程,我们现在已将所有内容迁移到主存储库中。
实验性帐户控制台版本 3
帐户控制台版本 3 现在在 Keycloak 中以实验性功能的形式提供。此版本支持使用“用户配置文件”功能创建的自定义字段。如果您想试用它并向我们提供一些早期反馈,您可以按如下方式启用它
bin/kc.sh start-dev --features=account3
Keycloak 基于 Java 的适配器中对 Keycloak 授权服务的支持的更改
作为移除已弃用适配器的一部分,Keycloak 策略执行器已从适配器代码库中提取到一个单独的依赖项中
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-policy-enforcer</artifactId>
<version>21.1.0</version>
</dependency>
通过提供此依赖项,我们希望能够将策略执行器与您喜欢的 Java 堆栈集成。
它还提供内置支持,使策略执行器能够与使用Wildfly Elytron保护的Jakarta应用程序一起使用。
目前,此依赖项尚未GA,因为我们仍在开发快速入门和文档。
此工作不应影响使用已弃用适配器的现有应用程序。= 默认情况下提供的 Javascript 引擎
在以前版本中,当 Keycloak 在 Java 17 上使用 Javascript 提供程序时,需要将 Nashorn Javascript 引擎添加到发行版中。由于 Keycloak 服务器默认提供 Nashorn Javascript 引擎,因此不再需要这样做。
Keycloak 21.0.0
Keycloak 使用 Micrometer 进行指标
Keycloak 提供了一个可选的指标端点,该端点以 Prometheus 格式导出指标。在此版本中,提供此数据的实现从 SmallRye 切换到 Micrometer。由于此更改,指标已重命名。
有关详细信息,请参阅迁移指南。
Keycloak 服务器的 Java 11 支持已弃用
现在,使用 Java 11 运行 Keycloak 服务器已被弃用,并计划在 Keycloak 22 中移除。
适配器在 Java 8、Java 11 和 Java 17 上仍然受支持。但是,我们计划在不久的将来移除对 Java 8 的支持。
SAML SP 元数据更改
在此版本之前,SAML SP 元数据包含用于签名和加密的相同密钥。从 Keycloak 的此版本开始,我们仅包含用于加密的加密意图领域密钥。对于每个加密密钥描述符,我们还指定了它应该使用的算法。下表显示了支持的 XML-Enc 算法与 Keycloak 领域密钥的映射。有关详细信息,请参阅升级指南。
XML-Enc 算法 |
Keycloak 领域密钥算法 |
RSA-OAEP |
|
RSA1_5 |
用户会话提供程序中的已弃用方法已移除
从用户会话提供程序中移除了一些已弃用的方法。如果尚未完成,则需要使用 Keycloak 20 版本的 Javadoc 中记录的相应替换来替换它们的使用。有关详细信息,请参阅升级指南。
新存储:IS_CLIENT_ROLE
可搜索字段已弃用
RoleModel
中的 IS_CLIENT_ROLE
可搜索字段已弃用。它应该替换为与运算符 EXISTS
或 NOT_EXISTS
一起使用的 CLIENT_ID
可搜索字段。有关详细信息,请参阅 Keycloak 21 的 JavaDoc。
FIPS 140-2 预览支持
Keycloak 中的 FIPS 140-2 支持在先前版本中是实验性的,现在已升级为预览版。为了创建此预览版,已经进行了许多修复和改进。有关详细信息,请参阅FIPS 文档。欢迎反馈!
再次感谢David Anderson、Sudeep Das 和Isaac Jensen 对此功能的巨大帮助。
在反向代理后面运行时对标准 Forwarded
标头的支持
除了识别非标准 X-Forwarded-*
以获取代理添加的信息(这些信息在代理服务器参与请求路径时会被更改或丢失)外,Keycloak 现在还可以利用标准 Forwarded
标头来实现相同目的。
有关详细信息,请参阅使用反向代理指南。
请确保您的代理在向 Keycloak 节点发出请求时也覆盖 Forwarded
标头。
容器映像现在基于 ubi9-micro
为了增强安全性,Keycloak 容器映像 已以两种方式进行了修改:首先,它现在基于 UBI9,而不是 UBI8。其次,我们已切换到 -micro
,而之前使用的是 -minimal
。
切换到 UBI9 对大多数用户不会产生任何影响。在极少数情况下,可能会出现 glibc 错误CPU 不支持 x86-64-v2。x86-64-v2
从 2009 年开始就已经在处理器中提供。当您的虚拟化环境配置错误时,您最有可能遇到此问题。
从 -minimal
切换到 -micro
有更大的潜在影响。对映像进行简单自定义的用户不会注意到任何区别,但是任何安装 RPM 的用户都需要更改安装方式。在容器中运行 Keycloak指南已更新,以向您展示如何操作。
由于这些更改,已知影响 Keycloak 容器映像的 CVE 减少了 82%!
其他改进
-
禁用客户端注册访问令牌轮换的选项。感谢Réda Housni Alaoui
Keycloak 20.0.0
WildFly 发行版已移除
在 Keycloak 17.0.0 中,新的基于 Quarkus 的 Keycloak 发行版问世,而基于 WildFly 的发行版已弃用。在此版本中,WildFly 发行版已被移除,不再受支持。
如果您仍在使用 WildFly 发行版,我们强烈建议您尽快迁移到 Quarkus 发行版,有关详细信息,请参阅迁移指南。
新的 Keycloak Operator 升级
我们很高兴地宣布,新的 Keycloak Operator(用于基于 Quarkus 的发行版)不再是预览功能。我们添加了新功能以及一些改进,其中一些导致了重大更改。
领域操作员
由于新的 Operator 目前缺少一些 CR(例如 Client 和 User),因此我们以 Realm Operator 的形式引入了临时解决方法。有关详细信息,请参阅其GitHub 存储库。另请参阅"Keycloak Operator CR 的未来" 博客文章。
受支持的 OpenJDK 版本
Keycloak 现在支持 OpenJDK 17,适用于服务器和适配器。
随着基于 WildFly 的发行版的移除,不再支持在 OpenJDK 8 上运行 Keycloak 服务器。我们还计划在 Keycloak 21 中移除对 Keycloak 适配器在 OpenJDK 8 上的支持。
从 Keycloak 22 开始,我们计划只支持最新的 OpenJDK LTS 版本,并争取尽快支持最新的 OpenJDK 版本。这意味着我们将在 Keycloak 22 中移除对 Keycloak 服务器的 OpenJDK 11 支持。
主机名提供程序现在支持配置完整的基 URL
在此版本中,我们引入了两个额外的服务器选项,用于为前端请求和管理控制台设置基 URL。
-
hostname-url
-
hostname-admin-url
更多详细信息可在配置主机名指南中找到。
嵌入式 H2 数据库的升级
Keycloak 为开发目的附带了 H2 数据库驱动程序。由于它仅用于开发目的,因此不应在生产环境中使用。
在此版本中,H2 驱动程序已从 1.x 版本升级到 2.x 版本。
用于托管 Keycloak JavaScript 适配器的功能保护
应用程序能够直接从 Keycloak 服务器加载 keycloak.js
。由于以这种方式加载 JavaScript 库不被视为最佳实践,因此现在存在一个功能保护,可以禁用此功能。
在 Keycloak 21 中,我们将弃用此选项,并在 Keycloak 22 中计划完全移除从 Keycloak 服务器加载 keycloak.js
的功能。
OTP 应用程序 SPI
在以前的版本中,显示给用户的 OTP 应用程序列表是在 Keycloak 中硬编码的。随着 OTP 应用程序 SPI 的引入,现在可以禁用内置的 OTP 应用程序,以及添加自定义 OTP 应用程序。
自定义身份提供程序现在可以为提供程序设置图标
自定义身份提供程序现在可以设置在登录页面上使用的图标。感谢Klaus Betz,他恰好还维护着一个扩展到 Keycloak 的扩展,以支持使用 AppleID 登录。
FIPS 140-2 实验支持
现在对将 Keycloak 部署到 FIPS 140-2 启用的环境中提供了实验支持。将在发布后不久发布一篇博客文章,其中包含有关如何尝试它的详细信息。欢迎反馈!
感谢David Anderson,他为该功能贡献了一些部分。此外,感谢Sudeep Das 和Isaac Jensen 的初始原型工作,这些工作被用作灵感来源。
按属性搜索组
现在可以通过 Admin REST API 按属性搜索组。感谢Alice 的贡献。
在帐户控制台中查看组成员身份
现在,用户可以在帐户控制台中查看其组成员身份。感谢cgeorgilakis 的贡献。
数据提供程序和模型中的已弃用方法已移除
从数据提供程序和模型中移除了一些已弃用的方法。如果尚未完成,则需要使用 Keycloak 19 版本的 Javadoc 中记录的相应替换来替换它们的使用。有关详细信息,请参阅升级指南。
Keycloak 19.0.0
OpenID Connect 和 SAML 适配器的生命周期结束
一些 Keycloak OpenID Connect 适配器已达到生命周期结束,未包含在此版本中。
Fuse 6 和 7 (OpenID Connect)
Keycloak 将不再为 Fuse 6 或 7 提供适配器。如果您需要 Fuse 的适配器,请使用 Red Hat Single Sign-On 7.x 适配器。
JBoss AS 7 和 EAP 6(OpenID Connect 和 SAML)
JBoss AS 7 已经很长时间没有维护了。如果您仍在使用 JBoss AS 7,我们建议您迁移到 WildFly 并利用 WildFly 中的原生 OIDC 支持。
使用 Red Hat JBoss Enterprise Application Platform 6.x 的 Red Hat 客户应使用 Red Hat Single Sign-On 7.x 适配器。这些适配器可以与 Keycloak 服务器结合使用。
Jetty 9.2 和 9.3(OpenID Connect 和 SAML)
Jetty 9.2 于 2018 年达到生命周期结束,而 Jetty 9.3 于 2020 年达到生命周期结束。如果您仍在使用这些版本,我们建议您尽快升级到 Jetty 9.4。
Spring Boot 1(OpenID Connect)
Spring Boot 1.x 于 2019 年达到生命周期结束。如果您仍在使用 Spring Boot 1,我们建议您尽快升级到 Spring Boot 2。
WildFly 传统安全层(OpenID Connect 和 SAML)
在 WildFly 25 中,传统安全层已被删除,将来只支持 Elytron。我们建议任何使用旧版本 WildFly 的人升级并利用 WildFly 中的原生 OIDC 支持。
使用 Red Hat JBoss Enterprise Application Platform 7.x 的 Red Hat 客户应使用 Red Hat Single Sign-On 7.x 适配器。这些适配器可以与 Keycloak 服务器结合使用。
Keycloak 存储中的更改
Keycloak 存储正在发生变化,当前的存储虽然仍然受支持,但最终将被全新的实现所取代。这种变化带来了对云原生存储的更好支持、无停机能力,以及对除用户之外的其他领域实现自定义存储的更好支持。
这意味着当前存储支持的功能中的一些重大更改将成为遗留功能。遗留存储和新存储不能同时使用;一次只能激活一个存储。
最明显的改变是用户存储 SPI 与新的存储 API,即 Map 存储 API 不兼容。因此,用户存储 SPI 将随着遗留存储一起被弃用,并将移至名为 keycloak-model-legacy
的单独模块中。此更改影响多个区域,尤其是与用户联合和自定义用户提供程序相关的区域。
此外,API 已合并,因此存储层的详细信息将对 REST 服务层透明。具体而言,服务将无法区分缓存和非缓存对象,也无法专门访问联合存储与本地存储。
因此,必须审查通过 KeycloakSession
方法访问本地存储或缓存中对象的自定义扩展。有关详细信息,请参阅 升级指南。
OIDC 注销更改
在之前的版本中,我们添加了对 OIDC 注销的支持。此版本包含一些其他修复和改进。亮点包括
-
对
client_id
参数的支持,该参数已在最近的 OIDC RP 发起的注销规范草案中添加。因此,无需使用客户端的同意要求
标志来显示注销确认屏幕。 -
在 OIDC 客户端中添加了配置选项
有效注销后重定向 URI
。此更改与 OIDC 规范保持一致,允许您使用一组不同的重定向 URI 来在登录和注销后重定向。有效注销后重定向 URI
中使用的值+
意味着注销将使用与有效重定向 URI
选项指定的相同一组重定向 URI。此更改还与从先前版本迁移时的默认行为匹配,因为要保持向后兼容性。
有关更多详细信息,请参阅 服务器管理指南。
更新电子邮件工作流程
有一个新的预览功能 UPDATE_EMAIL
。启用此功能并在领域中启用相应标志后,将要求用户通过单击发送到其新电子邮件地址的链接来确认更新其电子邮件。有关更多详细信息,请参阅 服务器管理指南。感谢 Réda Housni Alaoui 的贡献。
遗留 Keycloak 运算符中已弃用的 podDisruptionBudget
在此版本中,我们已弃用 遗留 Keycloak 运算符 的 Keycloak CR 中的 podDisruptionBudget
字段。当运算符部署在 Kubernetes 版本 1.25 及更高版本上时,将忽略此可选字段。
作为解决方法,您可以在集群中手动创建 Pod Disruption Budget,例如
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
labels:
app: keycloak
name: keycloak
spec:
maxUnavailable: 1
selector:
matchLabels:
component: keycloak
另请参阅 Kubernetes 文档。
对集中式日志记录的初步支持
从版本 19 开始,Keycloak 支持使用 GELF 将日志发送到 ELK、EFK 或 Graylog 等集中式日志记录解决方案。这些解决方案开箱即用。
您可以在 日志记录 指南中找到快速启动和运行的文档和示例。
Keycloak 18.0.0
新运算符预览
在此版本中,我们正在引入一个全新的 Keycloak 运算符作为预览版。除了从头开始重写之外,遗留运算符的主要用户界面更改是使用的 Keycloak 发行版——新运算符使用 Quarkus 发行版的 Keycloak。因此,API(以自定义资源定义的形式)已更改。有关详细信息(包括安装和迁移说明),请参阅 与运算符相关的指南。
遗留运算符 将继续接收更新,直到 Keycloak 20,届时 Keycloak WildFly 发行版将达到 EOL。
逐步验证
Keycloak 现在支持逐步验证。此功能是在 Keycloak 17 中添加的,并在本版本中进行了进一步的改进。
有关更多详细信息,请参阅 服务器管理指南。
感谢 Cornelia Lahnsteiner 和 Georg Romstorfer 的贡献。
OpenID Connect 注销改进
进行了一些修复和改进,以确保 Keycloak 现在完全符合所有 OpenID Connect 注销规范
-
OpenID Connect RP 发起的注销 1.0
-
OpenID Connect 前端注销 1.0
-
OpenID Connect 后端注销 1.0
-
OpenID Connect 会话管理 1.0
有关更多详细信息,请参阅 服务器管理指南。
WebAuthn 改进
Keycloak 现在支持 WebAuthn 无标识身份验证。此功能允许 WebAuthn 安全密钥在身份验证期间识别用户,只要安全密钥支持本地密钥即可。有关更多详细信息,请参阅 服务器管理指南。感谢 Joaquim Fellmann 的贡献。
除了此之外,还有更多 WebAuthn 改进和修复。
已弃用的 upload-script
功能已删除
upload-script
功能已被标记为已弃用很长时间。在此版本中,它已完全删除,不再受支持。
如果您正在使用以下任何功能
-
OpenID Connect 脚本映射器
-
脚本身份验证器(身份验证执行)
-
JavaScript 策略
您应该考虑阅读此 文档 以了解如何仍然依赖这些功能,但将脚本部署到服务器而不是通过管理界面进行管理。
SAML ECP 配置文件默认情况下处于禁用状态
为了减轻滥用 SAML ECP 配置文件的风险,Keycloak 现在阻止所有未明确允许此流程的 SAML 客户端使用此流程。可以使用客户端配置中的 允许 ECP 流程 标志启用配置文件,请参阅 服务器管理指南。
Quarkus 发行版
启动时导入领域
Keycloak Quarkus 发行版现在支持在启动时直接导入您的领域。有关更多信息,请查看相应的 指南。
其他改进
-
帐户控制台与最新的 PatternFly 版本保持一致。
-
支持加密的用户资料终结点响应。感谢Giacomo Altiero
-
支持用于加密密钥的算法 RSA-OAEP with A256GCM。感谢Filipe Bojikian Rissi
-
支持使用 GitHub 企业服务器登录。感谢Neon Ngo
Keycloak 17.0.0
亮点
Quarkus 发行版现在完全支持
默认的 Keycloak 发行版现在基于 Quarkus。新的发行版更快、更精简,并且配置起来更容易!
我们感谢您从 WildFly 发行版迁移,但这对于每个人来说都不容易,因为您启动和配置 Keycloak 的方式已经彻底改变。考虑到这一点,我们将继续支持 WildFly 发行版,直到 2022 年 6 月。
有关如何迁移到新发行版的详细信息,请查看Quarkus 迁移指南。
Quarkus 发行版更新
我们投入了大量精力来完善和改进 Quarkus 发行版,使其尽可能成为最佳体验。一些亮点包括
-
一种新的文档方法,采用服务器指南的形式,帮助您安装和配置 Keycloak
-
将 Quarkus 升级到 2.7.0.Final
-
配置文件不再是特定于 Java 的,并且与 CLI 参数对齐配置键
-
build options
和runtime configuration
之间的清晰区分。 -
h2-mem
和h2-file
数据库重命名为dev-mem
和dev-file
。 -
简化启用和禁用功能
-
自定义和不支持的 Quarkus 配置通过
conf/quarkus.properties
完成。 -
能够通过 JAVA_OPTS_APPEND 添加自定义 Java 选项(感谢dasniko)
-
初始日志记录功能
-
对跨数据中心 (Cross-DC) 的初始支持
-
不再支持用户定义的配置文件,而是使用不同的配置文件来实现相同目标
-
快速入门已更新为使用新发行版
Keycloak 16.1.0
亮点
升级到 Wildfly 26.0.0
Keycloak 服务器已升级为使用 Wildfly 26.0.0.Final 作为底层容器。
有关 WildFly 26 的更多信息,请参阅WildFly 26 发行说明。
Keycloak 16.0.0
亮点
升级到 Wildfly 25.0.1
Keycloak 服务器已升级为使用 Wildfly 25.0.1.Final 作为底层容器。
WildFly 25 放弃了对传统安全子系统的支持,该子系统完全被 Elytron 替换。这要求对 Keycloak 的配置方式进行重大更改。有关更多详细信息,请参阅迁移指南。
有关 WildFly 25 的更多信息,请参阅WildFly 25 发行说明。
Keycloak 15.1.0
亮点
Quarkus 发行版预览
毫不夸张地说,此版本最大的亮点是对 Quarkus 发行版所做的所有改进。事实上,太多了,很难全部列出来。
CLI 已被彻底改进,我们相信它现在提供了一种非常简单便捷的方法来配置和运行 Keycloak。它几乎简单到不需要文档。
要开始,只需解压缩发行版,然后键入bin/kc.[sh|bat] -h
即可发现精彩!
这并不意味着我们不打算提供配置 Keycloak 的文档,但这次它没有完成。由于缺乏文档,预计在发布后会发布一篇博文,介绍 Quarkus 发行版的所有更改,以及如何使用它的概述。
我们正在快速朝着将 Quarkus 发行版作为我们的默认发行版迈进,并且很快将弃用 WildFly 发行版。考虑到这一点,重要的是尽可能多的人试用它,如果发现任何可用性问题,无法使用它配置某些内容,或者发现任何错误,请向我们提供反馈。
我们很乐意在GitHub 讨论中听到您的想法和意见!
WildFly 更新
从 WildFly 23 升级到 WildFly 25 花费的时间比我们预期的要长。我们仍在努力,希望尽快发布带有升级版本的 Keycloak 16,但由于我们希望尽快发布对 Quarkus 发行版的更新,因此我们在此期间发布了此版本。
WildFly 适配器弃用
在 WildFly 25 中,现在有出色的原生 OpenID Connect 支持,无需 Keycloak 适配器。考虑到这一点,我们正在弃用我们的 WildFly 适配器,并且不支持 WildFly 25,但它将继续存在一段时间,用于旧版本的 WildFly 和 Red Hat JBoss Enterprise Application Platform 7.y。
Spring Security 和 Boot 适配器弃用
很久以前,在 Spring Security 5.0 中,Spring 中现在原生支持 OAuth 2.0 和 OpenID Connect。考虑到这一点,现在是开始弃用我们的 Spring Boot 和 Security 适配器的时候了。
OpenID Connect 前端通道注销支持
Keycloak 现在支持OpenID Connect 前端通道注销 1.0。
有关更多详细信息,请查看服务器管理指南。
感谢Ronaldo Yamada 的贡献。
Keycloak 15.0.1
亮点
此版本包含一些重要的错误修复。此外,我们要感谢Leandro José de Bortoli 对 FAPI 相关功能的贡献,例如 JARM 支持和 CIBA 的改进。
Keycloak 15.0.0
亮点
金融级 API (FAPI) 改进、FAPI CIBA 和巴西开放银行
Keycloak 服务器改进了对金融级 API (FAPI) 的支持。更具体地说,Keycloak 现在符合 FAPI CIBA 和巴西开放银行的要求。我们还支持 CIBA ping 模式。感谢Takashi Norimatsu,他完成了大部分关于 FAPI CIBA 的工作,并且一直在为 Keycloak 项目做着非常棒的工作。还要感谢Dmytro Mishchuk、Andrii Murashkin、Hryhorii Hevorkian 和Leandro José de Bortoli,他们也为 FAPI 合规性做了很多工作。最后,感谢FAPI 特别兴趣小组 的所有成员的帮助和反馈。
Keycloak 14.0.0
亮点
客户端策略和金融级 API (FAPI) 支持
Keycloak 服务器现在正式支持客户端策略和金融级 API (FAPI)。此功能在早期版本中已预览,但现在它更加完善,并且有适当的文档。感谢Takashi Norimatsu,他完成了大部分关于此功能的工作。还要感谢Dmytro Mishchuk、Andrii Murashkin 和Hryhorii Hevorkian,他们也为此功能做了很多工作。最后,感谢FAPI 特别兴趣小组 的所有成员的帮助和反馈。
对用户资料 SPI 的改进和对声明式配置的支持
在本版本中,对用户资料 SPI 进行了一些改进,为管理 Keycloak 中用户资料的方式奠定基础。
这些改进之一是对通过管理控制台配置用户资料的支持。有关更多详细信息,请继续访问服务器管理指南
感谢社区和所有参与此工作的个人。
对离线会话的改进
离线会话预加载已得到改进,感谢Peter Flintholm,它应该更快。
作为一个预览功能,离线会话预加载可以跳过,转而使用延迟加载,感谢Thomas Darimont 的努力。此功能必须在服务器配置中显式激活,有关详细信息,请参见服务器管理指南。
Keycloak 13.0.0
亮点
OpenID Connect 客户端发起后台认证 (CIBA)
现在支持 OpenID Connect 客户端发起后台认证 (CIBA)。
感谢 Takashi Norimatsu、Andrii Murashkin、Christophe Lannoy 和 FAPI 工作组成员的实施和反馈。
SAML Artifact 绑定在服务器到客户端的通信中
Keycloak 现在支持使用 SAML Artifact 绑定的客户端通信。客户端配置中引入了一个新的 Force Artifact Binding
选项,它强制使用 Artifact 消息与客户端通信。有关更多详细信息,请参阅 服务器管理指南。请注意,此版本中的 Keycloak SAML 客户端适配器不支持 Artifact 绑定。
感谢 AlistairDoswald 和 harture。
Keycloak 12.0.0
亮点
Keycloak.X 分发预览
介绍新的即将推出的 Keycloak.X 分发的预览版。此分发版由 Quarkus 提供支持,为启动时间和内存消耗带来了显著改进,并使 Keycloak 的配置变得更加容易。
新的帐户控制台现在是默认的
新的帐户控制台不再是预览功能,现在是 Keycloak 中的默认帐户控制台。旧的帐户控制台会保留一段时间。对于那些为旧的帐户控制台定制主题的人,旧的控制台将默认使用,让您有时间将定制主题更新到新的帐户控制台。
OpenID Connect 后台注销
现在支持 OpenID Connect 后台注销,感谢 DaSmoo 和 benjamin37。
FAPI RW 支持和对客户端策略的初始支持
已经做了很多工作来支持金融级 API 读取和写入 API 安全配置文件 (FAPI RW)。这可以通过使用客户端策略来实现,并且仍处于预览状态。您可以在接下来的版本中期待更多改进。感谢 Takashi Norimatsu 和所有 FAPI 特别兴趣小组 成员。
将登录主题升级到 PatternFly 4
Keycloak 登录主题组件已升级到 PatternFly 4。旧的 PatternFly 3 与新的 PatternFly 4 同时运行,因此可以将 PF3 组件保留在那里。
登录主题中还有一些设计更改,以提供更好的用户体验。您甚至可以为定制的 Identity Provider 定义图标。有关详细信息,请参阅 文档。
Gatekeeper 停产
Gatekeeper 于 21 年 11 月停产。这意味着我们不再支持或更新它。公告可在 此处 查看。
其他改进
-
支持在没有刷新令牌且没有用户会话的情况下使用 OAuth2 客户端凭据授予。感谢 Thomas Darimont
-
支持将访问令牌发送到 OAuth2 吊销端点
Keycloak 11.0.0
亮点
LDAP 组映射器的命名空间支持
LDAP 组映射器的命名空间支持允许您将 LDAP 中的组映射到 Keycloak 组树的指定分支(命名空间)下。以前,LDAP 中的组始终作为 Keycloak 中的顶级组添加。
升级到 WildFly 20
Keycloak 服务器已升级为在幕后使用 WildFly 20.0.1.Final。有关更多详细信息,请查看 升级指南。
SAML POST 绑定在最新版本的浏览器中已损坏
JSESSIONID
Cookie 的 SameSite
值 None
对于 Keycloak SAML 适配器的正确行为是必要的。使用不同的值会导致在使用 SAML POST 绑定时,每次向 Keycloak 发出请求时都会重置容器的会话。请参阅以下步骤 Keycloak SAML Galleon 特性包,用于 WildFly 和 EAP 指南,以保持正确的行为。请注意,此解决方法也应该适用于适配器的先前版本。
其他改进
-
支持客户端离线会话生存期。感谢 Yoshiyuki Tabata
-
捷克语翻译。感谢 Jakub Knejzlík
-
能够从 Facebook 身份提供者获取其他字段。感谢 Bartosz Siemieńczuk
-
支持用于签名和加密 ID 令牌的 AES 192 和 AES 256 算法。感谢 Takashi Norimatsu
-
能够在签名 JWT 客户端身份验证中指定签名算法。感谢 Takashi Norimatsu
Keycloak 10.0.0
亮点
身份代理同步模式
使用身份代理同步模式,现在可以控制用户配置文件是在首次登录时更新,还是在每次从外部 Identity Provider 登录时更新。也可以覆盖单个映射器上的此行为。
感谢 Martin Idel
OpenID Connect/OAuth 2.0 的客户端会话超时
通常,SSO 会话会持续数天甚至数月,而单个客户端会话应该理想情况下短得多。通过引入客户端会话超时,现在可以为单个客户端配置单独的超时,以及为 realm 中的所有客户端配置默认超时。
Keycloak 9.0.1
Keycloak 9.0.0
亮点
对客户端的支持分页
管理控制台和 REST API 的客户端添加了分页支持。感谢 saibot94。
新的 Elytron 凭据存储库提供程序
一个新的内置库提供程序已作为 WildFly 扩展添加,它从基于密钥库的 Elytron 凭据存储库中读取机密。凭据存储库的创建和管理由 Elytron 使用 elytron
子系统或 elytron-tool.sh
脚本处理。
Keycloak 8.0.0
亮点
新的默认主机名提供程序
固定主机名提供程序和请求主机名提供程序已被单个新的默认主机名提供程序取代。此提供程序具有一些改进,包括
-
无需更改提供程序即可设置固定基本 URL
-
支持前端和后端请求的不同基本 URL
-
支持在 Keycloak 通过反向代理在不同上下文路径上公开的情况下更改上下文路径
主题资源中的消息
主题资源中的消息捆绑包支持对自定义提供程序(如身份验证器)进行国际化。它们还可以在所有主题类型之间共享,例如,可以在登录和帐户控制台之间共享消息。感谢 micedre。
SAML 适配器的 RoleMappingsProvider SPI
我们添加了一个新的 SPI,它允许配置自定义角色映射器,SAML 适配器使用这些映射器将从 SAML 断言中提取的角色映射到 SP 应用程序环境中存在的角色。这在适配器需要与第三方 IDP 通信并且 IDP 在断言中设置的角色与为 SP 应用程序定义的角色不匹配时特别有用。要在 keycloak-saml.xml
文件或 keycloak-saml
子系统中配置要使用的提供程序。还提供了一个基于属性文件内容执行角色映射的实现。
请注意,当 Keycloak 充当 IDP 时,我们可以使用内置角色映射器在将角色设置到断言之前执行任何必要的映射,因此在这种情况下,此 SPI 可能冗余。RoleMappingsProvider
SPI 是为 IDP 在将角色添加到断言之前没有提供任何方式来映射角色的情况而设计的。
W3C Web 身份验证支持
在此版本中,我们添加了对 W3C Web 身份验证 (WebAuthn) 的初始支持。当前实现中有一些限制,但我们正在努力进一步改进这方面。感谢 tnorimat 的贡献。还要感谢 ynojima 的帮助和反馈。
支持无密码身份验证、多因素身份验证和每个用户多个凭据
随着 W3C Web 身份验证支持的到来,我们已经改进了身份验证流程系统,以便允许用户选择首选的登录身份验证方法(例如,在 OTP 凭据和 WebAuthn 凭据之间进行选择)。新机制还允许管理员为无密码登录制作流程,例如只使用 WebAuthn 作为身份验证方法。请注意,在进行这些更改后,您创建的任何自定义身份验证流程可能需要适应新的流程逻辑。
由于这些更改,用户现在可以拥有多个 OTP 设备和多个 WebAuthn 设备。允许用户在登录期间选择使用哪种类型的设备的相同系统也允许用户选择使用哪个特定设备。感谢 Cloudtrust 团队:AlistairDoswald、sispeo 和 Fratt 的贡献,以及 harture 和 Laurent 的帮助。
其他改进
theme.properties 中的系统属性和环境变量支持
现在可以在 theme.properties 文件中使用系统属性和环境变量。感谢 Opa-
支持使用签署的 JWT 进行客户端身份验证的更多签名算法
感谢 tnorimat,我们支持使用签署的 JWT 进行客户端身份验证的更多签名算法。
支持启用/禁用对 Javascript 适配器的日志记录
感谢 jonkoops,现在可以为 JS 适配器启用或禁用日志记录。
从 Javascript 适配器中删除了凭据支持
在 Javascript 适配器中提供客户端凭据的选项已删除。感谢 jonkoops
Gatekeeper 的更新
-
Gatekeeper 中包含安全令牌和注销端点。感谢 fredbi
-
Gatekeeper 上存在一个错误,导致 cookie 被应用于子域。感谢 daniel-ac-martin 修复了该问题
-
现在,Gatekeeper 提供对 Same-site cookie 的支持。感谢 fiji-flo
将脚本部署到服务器
请查看 7.0.1 版本说明,详细了解如何现在可以部署和运行脚本以自定义特定行为。
Keycloak 7.0.1
将脚本部署到服务器
到目前为止,管理员可以通过 Keycloak 管理控制台以及通过 RESTful 管理 API 将脚本上传到服务器。
从现在起,默认情况下此功能被禁用,用户应该优先考虑直接将脚本部署到服务器。有关更多详细信息,请查看 Javascript 提供程序。
Keycloak 7.0.0
亮点
签名和加密的 ID 令牌支持
Keycloak 可以根据 Json Web 加密 (JWE) 规范支持签名和加密的 ID 令牌。感谢 tnorimat。
其他改进
-
PKCE 支持已添加到 Javascript 适配器。感谢 thomasdarimont
-
Oracle 数据库支持已添加到 Keycloak 容器镜像中。感谢 nerdstep
-
时钟偏差支持已添加到 SAML 适配器中。感谢 steevebtib
-
Node.js 适配器的 TypeScript 支持。感谢 evanshortiss
-
Gatekeeper 现在允许在标头中提供未加密的令牌,同时在 cookie 中加密。在 Keycloak 服务器上启用“撤销刷新令牌”时,Gatekeeper 还存在一个错误。该问题已修复。感谢 fredbi
-
管理控制台中添加了一个新选项卡,用于显示客户端角色的用户列表。感谢 unly
Keycloak 6.0.0
PS256 支持
感谢 tnorimat,Keycloak 现在支持使用 PS256 签名和验证令牌。
Keycloak 4.8.0.Final
OpenShift 集成
现在可以使用 Keycloak 完全保护 OpenShift 3.11,包括将服务帐户自动公开为 OAuth 客户端作为 Keycloak 的客户端。
这目前是技术预览功能。
规则/Drools 策略被标记为技术预览功能
到目前为止,Drools 策略默认启用。 但是现在,此策略类型仅作为技术预览功能提供,要使用它,您需要启用预览配置文件或相应的特性。 有关更多详细信息,请查看 授权服务指南。
Keycloak 4.6.0.Final
Keycloak Gatekeeper
Keycloak Gatekeeper 提供了一个安全代理,可用于保护应用程序和服务,而无需适配器。 它可以与您的应用程序一起安装在本地,也可以作为 OpenShift 或 Kubernetes 上的 sidecar 安装。
非常感谢 gambol99 为 Keycloak 贡献了这项工作。
Keycloak 4.5.0.Final
签名 SPI
签名 SPI 使得可以插入其他签名算法。 这使其他签名成为可能,并且还使更改签名生成方式成为可能。 例如,使用它允许使用 HSM 设备来签名令牌。
感谢 tnorimat 为此项工作的贡献了很大一部分。
新的签名算法
与签名 SPI 一道,现在还支持其他签名算法。
Keycloak 现在支持 RS256、RS384、RS512、ES256、ES384、ES512、HS256、HS384 和 HS512。
椭圆曲线数字签名算法 (ES256/384/512) 非常有趣,因为它们提供与 RSA 签名类似的安全属性,但使用明显更少的 CPU。
HMAC (HS256/384/512) 在您不希望应用程序自己验证签名时也非常有用。 由于这些是对称签名,因此只有 Keycloak 才能验证签名,这需要应用程序使用令牌自省端点来验证令牌。
感谢 tnorimat 为此项工作的贡献了很大一部分。
次要改进
-
添加了 LocaleSelector SPI,它允许更改为特定请求解析语言环境的方式。 感谢 knutz3n
-
添加了一个验证器,以在第一次 IdP 身份验证后自动将身份提供者身份链接到现有帐户。 感谢 slominskir
Keycloak 4.4.0.Final
升级到 WildFly 13
Keycloak 服务器已升级为在后台使用 WildFly 13。 这意味着底层依赖项的更新,以及配置的一些更改。 我们现在还支持 WildFly 13 适配器,并且我们为跨数据中心设置升级了底层的 JDG/Infinispan 服务器版本。 有关更多详细信息,请参阅 升级指南。
次要改进
-
更新欢迎页面的设计
-
允许将当前语言环境传递给 OAuth2 IdP。 感谢 knutz3n
-
支持 Content-Security-Policy-Report-Only 安全标头。 感谢 knutz3n
-
基于脚本的 SAML 协议映射器。 感谢 AlistairDoswald
Keycloak 4.3.0.Final
主机名 SPI
主机名 SPI 引入了一种更灵活的方式来配置 Keycloak 的主机名。 有两个内置提供程序。 第一个是请求,它使用请求标头来确定主机名。 第二个是固定,它允许配置固定主机名。 后者确保只能使用有效的主机名,并且还允许内部应用程序通过备用 URL 调用 Keycloak。
有关更多详细信息,请参阅 服务器管理指南中的威胁缓解部分。
授权服务的性能改进
对于此版本,我们改进了整个策略评估性能,提高了可靠性和吞吐量。 我们所做的主要更改与尝试通过避免不必要的流程并尽快收集决策来优化策略评估路径有关。 我们还在每个请求的基础上引入了策略决策缓存,避免了先前评估的策略的冗余决策。
我们还在研究其他缓存层,这将提供更好的体验。 请参阅 KEYCLOAK-7952。
从服务器获取权限时选择响应模式
在以前的版本中,权限始终使用标准 OAuth2 响应从服务器返回,其中包含访问令牌和刷新令牌。 在此版本中,客户端可以使用 response_mode
参数来指定服务器应如何响应授权请求。 此参数接受两个值
-
决策
表示响应应该只包含一个标志,指示服务器是否授予了权限。 否则将返回
403
HTTP 状态代码。 -
权限
表示响应应使用 JSON 格式包含服务器授予的每个权限。
NodeJS 策略执行器
keycloak-nodejs-connect(NodeJS 的适配器)现在支持根据从服务器获取的决策来保护资源的构造。 新的构造允许用户使用细粒度的权限来保护其资源,如下所示
app.get('/protected/resource', keycloak.enforcer('resource:view'), function (req, res) {
res.json({message: 'access granted'});
});
支持 Google 登录的托管域
使用 Google 登录现在支持 hd
参数,以将 Google 登录限制为 Google 的特定托管域。 当在身份提供者中指定此参数时,来自不同域的任何登录都将被拒绝。
感谢 brushmate 的贡献。
Keycloak 4.2.0.Final
对 Cordova 的浏览器选项卡支持
我们现在支持在 Cordova 的 JavaScript 适配器中使用浏览器选项卡和通用链接。 这使多个应用程序之间的 SSO 成为可能,并且提高了安全性。
感谢 gtudan 的贡献。
Keycloak 4.0.0.Final
客户端范围和对 OAuth 2 范围参数的支持
我们添加了对客户端范围的支持,它取代了客户端模板。 客户端范围是一种更灵活的方法,并且还提供了对 OAuth scope
参数的更好支持。
同意屏幕中与客户端范围相关的更改。 同意屏幕上的列表现在链接到客户端范围,而不是协议映射器和角色。
有关更多详细信息,请参阅文档和迁移指南。
OAuth 2 证书绑定访问令牌
我们现在已经部分实现了 OAuth 2.0 互信 TLS 客户端认证和证书绑定访问令牌 规范。更准确地说,我们支持证书绑定访问令牌。如果您的机密客户端能够使用双向 SSL,Keycloak 将能够将客户端证书的哈希值添加到为客户端发行的令牌中。目前,只有 Keycloak 本身会验证令牌哈希值(例如在 refresh token
请求期间)。我们计划为适配器添加支持。我们还计划添加对互信 TLS 客户端认证的支持。
感谢 tnorimat 的贡献。
授权服务
UMA 2.0 支持
授权服务现在支持 UMA 2.0。如果您是从 Keycloak 的早期版本迁移而来,请查看文档以获取更多详细信息。
策略执行器现在接受常规访问令牌
在某些情况下,您可能只想将常规访问令牌发送到资源服务器,但仍然能够对这些资源执行策略。
此版本引入的主要更改之一是,您不再需要将访问令牌与 RPT 交换才能访问受资源服务器保护的资源(未使用 UMA 时)。根据在资源服务器端如何配置策略执行器,您只需将常规访问令牌作为承载令牌发送,权限仍将被执行。
策略执行器现在可以按需从服务器加载资源
到目前为止,在部署配置了 policy-enforcer
的应用程序时,策略执行器要么从服务器加载所有受保护的路径,要么只是将这些路径从适配器配置中映射出来。用户现在可以选择按需从服务器加载路径,并避免在适配器配置中映射这些资源。根据您拥有的受保护资源数量,此功能还可以缩短部署应用程序所需的时间。
主题和主题资源
现在可以通过常规提供程序部署将主题热部署到 Keycloak。我们还添加了对主题资源的支持,这允许添加额外的模板和资源,而无需创建主题。这对需要将其他页面添加到身份验证流程的自定义身份验证器很有用。
我们还添加了对覆盖特定客户端的主题的支持。如果这不足以满足您的需求,那么还有一种新的主题选择器 SPI,允许您实现自定义逻辑来选择主题。
Instagram 身份提供者
我们添加了对使用 Instagram 登录的支持。感谢 hguerrero 的贡献。
适配器
JavaScript - Cordova 选项
现在可以在 JavaScript 适配器中将 Cordova 特定选项传递给登录和其他方法。感谢 loorent 的贡献。