spec:
truststores:
mystore:
secret:
name: mystore-secret
myotherstore:
secret:
name: myotherstore-secret
2024 年 3 月 4 日
要下载此版本,请访问 Keycloak 下载。
用户配置文件预览功能已升级为完全支持,并且默认启用用户配置文件。
在过去的几个月中,Keycloak 团队花费了大量精力来完善用户配置文件功能,使其得到完全支持。在此版本中,我们继续努力。根据我们优秀社区的全面测试和反馈,进行了大量的改进、修复和完善。
以下是此功能的一些亮点:
对用户和管理员可以管理的属性进行细粒度控制,以便您可以防止设置意外的属性和值。
能够指定哪些用户属性由常规用户或管理员管理并应在表单上显示。
动态表单 - 以前,用户创建或更新其配置文件的表单包含四个基本属性,如用户名、电子邮件、名字和姓氏。添加任何属性(或删除某些默认属性)都需要您创建自定义主题。现在可能不需要自定义主题了,因为用户会根据特定部署的要求准确地看到请求的属性。
验证 - 能够为用户属性指定验证器,包括内置验证器,您可以使用它们来指定最大或最小长度、特定正则表达式,或将特定属性限制为 URL 或数字。
注解 - 能够指定特定属性应呈现为例如文本区域、带有指定选项的 HTML 选择框、日历或许多其他选项。您还可以将 JavaScript 代码绑定到特定字段,以更改属性的呈现方式并自定义其行为。
渐进式配置 - 能够指定某些字段是必需的,或者仅对于 scope
参数的特定值在表单上可用。这有效地允许渐进式配置。您不再需要在注册期间要求用户填写 20 个属性;您可以根据用户使用的各个客户端应用程序的要求,逐步要求用户填写属性。
从以前版本迁移 - 用户配置文件现在始终启用,但对于那些未使用此功能的用户,其操作方式与以前相同。您可以从用户配置文件功能中受益,但不是必须使用它们。有关迁移说明,请参阅升级指南。
作为受支持功能的用户配置文件的首次发布只是起点,也是交付更多身份管理功能的基础。
我们要非常感谢优秀的 Keycloak 社区,许多想法、需求和贡献都来自社区!特别感谢
有关用户配置文件功能的更多详细信息,请参阅服务器管理指南。
在此版本中,用户配置文件 SPI 的更改可能会影响基于此 SPI 的现有实现。有关更多详细信息,请参阅升级指南。
在此版本中,更新了以下模板,以便可以基于为 Realm 设置的用户配置文件配置动态呈现属性
login-update-profile.ftl
register.ftl
update-email.ftl
有关更多详细信息,请参阅升级指南。
在此版本中,当用户首次通过 Broker 进行身份验证时,服务器会使用 idp-review-user-profile.ftl
模板呈现更新配置文件页面。
有关更多详细信息,请参阅升级指南。
早在 2022 年,我们就宣布了 Keycloak 19 中 Keycloak 适配器的弃用。为了给社区更多时间来采用,此举被推迟了。
考虑到这一点,这将是包含 OpenID Connect 和 SAML 适配器的 Keycloak 的最后一个主要版本。由于 Jetty 9.x 自 2022 年以来已不受支持,Jetty 适配器已在此版本中移除。
通用授权客户端库将继续得到支持,并旨在与任何其他 OAuth 2.0 或 OpenID Connect 库结合使用。
我们将继续交付的唯一适配器是用于最新版本的 WildFly 和 EAP 8.x 的 SAML 适配器。继续支持它的原因是 Keycloak 中大部分 SAML 代码库都来自 WildFly 的贡献。作为此贡献的一部分,我们同意长期维护 WildFly 和 EAP 的 SAML 适配器。
Jetty 9.4 在社区中长期不受支持,并在 2022 年达到生命周期结束。与此同时,该适配器尚未针对更新版本的 Jetty 进行更新或测试。由于这些原因,Jetty 适配器已从此版本中移除。
首次使用 Keycloak 时出现的“欢迎”页面已重新设计。它提供了更好的设置体验,并符合最新版本的 PatternFly。简化的页面布局仅包含一个用于注册第一个管理用户的表单。完成注册后,用户将直接被发送到管理控制台。
如果您使用自定义主题,则可能需要更新它以支持新的欢迎页面。有关详细信息,请参阅升级指南。
我们在 Keycloak 22 中引入了账户控制台的第 3 版作为预览功能。在此版本中,我们将其设为默认版本,并在此过程中弃用了第 2 版,该版本将在后续版本中移除。
这个新版本内置了对用户配置文件功能的支持,该功能允许管理员配置哪些属性在账户控制台中对用户可用,并在用户登录后直接将用户定向到他们的个人账户页面。
如果您正在使用或扩展此主题的自定义功能,则可能需要执行其他迁移。有关更多详细信息,请参阅升级指南。
package.json
中使用 exports
字段Keycloak JS 适配器现在在其 package.json
中使用 exports
字段。此更改改进了对更现代的打包器(如 Webpack 5 和 Vite)的支持,但带来了一些不可避免的重大更改。有关更多详细信息,请参阅升级指南。
Keycloak JS 适配器现在默认将 pkceMethod
选项设置为 S256
。此更改为所有使用该适配器的应用程序启用了 Proof Key Code Exchange (PKCE)。如果您在不支持 PKCE 的系统上使用该适配器,则可以将 pkceMethod
选项设置为 false
以禁用它。
在此版本中,我们调整了密码哈希默认设置,以匹配 OWASP 密码存储建议。
作为此更改的一部分,默认密码哈希提供程序已从 pbkdf2-sha256
更改为 pbkdf2-sha512
。此外,基于 pbkdf2
的密码哈希算法的默认哈希迭代次数也发生了变化。此更改意味着更好的安全性与最新的建议保持一致,但会对性能产生影响。可以通过将密码策略 hashAlgorithm
和 hashIterations
添加到您的 Realm 来坚持旧的行为。有关更多详细信息,请参阅升级指南。
此版本包含对轻量级访问令牌的支持。因此,您可以为指定的客户端拥有更小的访问令牌。这些令牌只有少量声明,这就是它们更小的原因。请注意,轻量级访问令牌仍然是默认情况下由 Realm 密钥签名的 JWT,并且仍然包含一些非常基本的声明。
此版本引入了一个添加到轻量级访问令牌标志,该标志在某些 OIDC 协议映射器上可用。使用此标志指定是否应将特定声明添加到轻量级访问令牌。默认情况下为关闭,这意味着大多数声明不会被添加。
此外,还存在客户端策略执行器。使用它来指定特定客户端请求应使用轻量级访问令牌还是常规访问令牌。执行器的替代方法是在客户端高级设置上使用始终使用轻量级访问令牌标志,这将导致客户端始终使用轻量级访问令牌。如果您需要更大的灵活性,执行器可以作为一种替代方案。例如,您可以选择默认使用轻量级访问令牌,但仅对指定的 scope 参数使用常规令牌。
之前的版本添加了一个添加到令牌内省开关。您可以使用它将访问令牌中不存在的声明添加到内省端点响应中。
感谢 Shigeyuki Kabano 的贡献,感谢 Takashi Norimatsu 对此功能的帮助和审查。
此版本包含可选的 OAuth 2.1 支持。此版本中引入了新的客户端策略配置文件,管理员可以使用这些配置文件来确保客户端和特定客户端请求符合 OAuth 2.1 规范。存在用于机密客户端的专用客户端配置文件和用于公共客户端的专用配置文件。感谢 Takashi Norimatsu 和 Shigeyuki Kabano 的贡献。
从这个版本开始,支持 OAuth2/OIDC 端点中用于令牌刷新的 scope 参数。使用此参数请求范围小于最初授予的访问令牌,这意味着您无法增加访问令牌范围。此范围限制不影响刷新的刷新令牌的范围。此功能的工作方式如 OAuth2 规范中所述。感谢 Konstantinos Georgilakis 的贡献。
引入了一个新的客户端策略执行器 secure-redirect-uris-enforcer
。使用它来限制客户端可以使用哪些重定向 URI。例如,您可以指定客户端重定向 URI 不能有通配符,应该仅来自特定域,必须符合 OAuth 2.1 等。感谢 Lex Cao 和 Takashi Norimatsu 的贡献。
引入了一个新的客户端策略执行器 dpop-bind-enforcer
。如果启用了 dpop
预览,您可以使用它来为特定客户端强制执行 DPoP。感谢 Takashi Norimatsu 的贡献。
您可以创建 EdDSA Realm 密钥,并将它们用作各种客户端的签名算法。例如,您可以使用这些密钥来签署令牌或用于使用签名 JWT 进行客户端身份验证。此功能包括身份代理,其中 Keycloak 本身会签署用于第三方身份提供商的 private_key_jwt
身份验证的客户端断言。感谢 Takashi Norimatsu 和 Muhammad Zakwan Bin Mohd Zahid 的贡献。
用于提供 Realm 密钥的提供程序 JavaKeystoreProvider
现在除了以前支持的 RSA 密钥外,还支持 EC 密钥。感谢 Stefan Wiedemann 的贡献。
OIDC 身份提供程序现在具有将 X.509 标头添加到 JWT 选项,用于在使用私钥签名的 JWT 进行客户端身份验证的情况。当与某些身份提供程序(如 Azure AD)互操作时,此选项可能很有用,这些身份提供程序要求 JWT 上存在指纹。感谢 MT 的贡献。
Keycloak 代码库包括一个内部更新,以引入 OAuth Grant Type SPI。此更新在引入 Keycloak OAuth 2 令牌端点支持的自定义授权类型时,允许更大的灵活性。感谢 Dmitry Telegin 的贡献。
CORS 相关的 Keycloak 功能已提取到 SPI 中,这可以允许更大的灵活性。请注意,CorsSPI
是内部的,并且在未来的版本中可能会发生变化。感谢 Dmitry Telegin 的贡献。
Keycloak 引入了改进的 Truststore 配置选项。Keycloak Truststore 现在在整个服务器中使用,包括出站连接、mTLS 和数据库驱动程序。您不再需要为各个区域配置单独的 Truststore。要配置 Truststore,您可以将 Truststore 文件或证书放在默认的 conf/truststores
中,或使用新的 truststore-paths
配置选项。有关详细信息,请参阅相关的指南。
功能现在支持版本控制。为了保持向后兼容性,所有现有功能(包括 account2
和 account3
)都标记为版本 1。新引入的功能将使用版本控制,这意味着用户可以在所需功能的不同实现之间进行选择。
有关详细信息,请参阅功能指南。
您还可以通过使用 Keycloak CR 来利用新的服务器端 Truststore 处理,例如
spec:
truststores:
mystore:
secret:
name: mystore-secret
myotherstore:
secret:
name: myotherstore-secret
目前仅支持 Secrets。
Kubernetes CA 的证书会自动添加到 Operator 管理的 Keycloak Pod 中。
现在可以将 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 现在包含一个 startOptimized
字段,该字段可用于覆盖关于是否为启动命令使用 --optimized
标志的默认假设。因此,即使使用自定义 Keycloak 镜像,您也可以使用 CR 来配置构建时选项。
在此版本中,我们正在封装根用户属性(例如 username
、email
、firstName
、lastName
和 locale
),方法是将它们移动到基类/抽象类中,以便在使用 Admin 和账户 REST API 时对这些属性的编组和解组方式进行对齐。
此策略提供了客户端管理属性时的一致性,并确保它们符合为 Realm 设置的用户配置文件配置。
有关更多详细信息,请参阅升级指南。
从此版本开始,Keycloak 集群的第一个成员将按顺序加载远程会话,而不是并行加载。如果启用了离线会话预加载,这些会话也将按顺序加载。
有关更多详细信息,请参阅升级指南。
在此版本中,如果用户已通过身份验证并且操作绑定到另一个用户,您将无法再执行电子邮件验证等操作。例如,如果电子邮件链接绑定到不同的帐户,则用户无法完成验证电子邮件流程。
在此版本中,如果用户尝试点击链接验证电子邮件,但该电子邮件之前已验证,则会显示正确的消息。
除此之外,还将触发新的错误 (EMAIL_ALREADY_VERIFIED
) 事件,以指示尝试验证已验证的电子邮件。您可以利用此事件来跟踪可能的劫持用户帐户的企图(如果链接已泄露),或者在用户不识别该操作时提醒用户。
Keycloak 的默认行为是按需加载离线会话。在启动时预加载它们的旧行为现已弃用,因为在启动时预加载它们无法随着会话数量的增长而很好地扩展,并且会增加 Keycloak 的内存使用量。旧的行为将在未来的版本中移除。
有关更多详细信息,请参阅升级指南。
为了减少内存需求,我们引入了一个配置选项来缩短导入到 Infinispan 缓存中的离线会话的生命周期。目前,默认情况下禁用离线会话生命周期覆盖。
有关更多详细信息,请参阅服务器管理指南。
对暴力破解保护进行了一些增强
当由于暴力破解保护导致使用 OTP 或恢复代码进行身份验证的尝试失败时,活动身份验证会话将失效。任何进一步尝试使用该会话进行身份验证都将失败。
在以前版本的 Keycloak 中,管理员必须选择暂时或永久禁用用户,原因是针对其帐户的暴力破解攻击。管理员现在可以在给定次数的临时锁定后永久禁用用户。
属性 failedLoginNotBefore
已添加到 brute-force/users/{userId}
端点
在以前版本的 Keycloak 中,当用户、组或客户端策略的最后一个成员被删除时,该策略也会被删除。不幸的是,如果该策略在聚合策略中使用,则可能导致权限升级。为了避免权限升级,效果策略不再被删除,管理员需要更新这些策略。
Keycloak CR 现在允许使用 cache
规范 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 容器指定 resources
选项,以管理计算资源。它提供了通过 Keycloak CR 为主 Keycloak 部署以及通过 Realm Import CR 为 Realm 导入 Job 独立请求和限制资源的能力。
当未指定任何值时,默认 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 提供程序。这为 Keycloak 处理的 Cookie 提供了更好的一致性,并能够在需要时引入围绕 Cookie 的配置选项。
用户属性映射器对于 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
Keycloak 没有为初始堆大小和最大堆大小指定硬编码值,而是使用相对于容器总内存的相对值。JVM 选项 -Xms
和 -Xmx
已替换为 -XX:InitialRAMPercentage
和 -XX:MaxRAMPercentage
。
有关更多详细信息,请参阅在容器中运行 Keycloak 指南。
随着提供与 GELF 集成的底层库的停止维护,Keycloak 将不再开箱即用地支持 GELF 日志处理程序。此功能将在未来的版本中移除。如果您需要外部日志管理,请考虑使用文件日志解析。
对于某些环境来说,将 Keycloak 部署到多个独立站点对于提供高可用性和从故障中快速恢复至关重要。此版本支持 Keycloak 的主动-被动部署。
要开始使用,请使用高可用性指南,其中还包括在云环境中部署高可用性 Keycloak 的综合蓝图。
在升级之前,请参阅迁移指南,以获取完整的更改列表。