第 2 章 特定于发行的更改
在升级前仔细检查这些更改。
2.1. RH SSO 7.6
从 Red Hat Single Sign-On 7.5 到 Red Hat Single Sign-On 7.6 有以下更改。
2.1.1. 步骤验证
分步身份验证是一项新功能。此功能提供了 cr
客户端范围,它包含应当在令牌中添加 cr
声明的协议映射程序。现在,这个声明会被自动添加,而是使用这个客户端范围和协议映射程序。
客户端范围被添加为域"默认"客户端范围,因此将添加到所有新创建的客户端。出于性能考虑,在迁移期间,客户端范围不会自动添加到所有现有客户端。迁移后,客户端默认不会 具有cr
声明。考虑以下可能的操作:
-
如果您没有计划使用步骤身份验证功能,但您依赖令牌中的
acr
声明,您可以禁用step_up_authentication
功能,如 服务器安装和配置指南 中所述。在进行正常身份验证时,声明将加上值1
,在 SSO 身份验证时将加上值 0。 -
通过 admin REST API 或 admin 控制台手动向客户端
添加
关键客户端范围。这在您想要使用步骤验证时才需要。如果您在域中有大量客户端,并希望为它们使用cr 声明,
您可以针对您的 DB 触发一些类似于您的 DB 的 SQL。但是,如果已经启动 Red Hat Single Sign-On,请记住清除缓存或重启服务器:
insert into CLIENT_SCOPE_CLIENT (CLIENT_ID, SCOPE_ID, DEFAULT_SCOPE) select CLIENT.ID as CLIENT_ID, CLIENT_SCOPE.ID as SCOPE_ID, true as DEFAULT_SCOPE from CLIENT_SCOPE, CLIENT where CLIENT_SCOPE.REALM_ID='test' and CLIENT_SCOPE.NAME='acr' and CLIENT.REALM_ID='test' and CLIENT.PROTOCOL='openid-connect';
2.1.2. OpenID Connect Logout
以前版本的 Red Hat Single Sign-On 支持自动注销用户,并通过打开注销端点 URL(如 http(s)://example-host/auth/realms/my-realm-name/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri
)来重定向到应用程序。虽然这种实施非常容易使用,但可能会对性能和安全性造成负面影响。根据 OpenID Connect RP-Initiated Logout 规格,新版本可以更好地支持注销。参数 redirect_uri
不再被支持;此外,新版本中,用户需要确认注销。当包含参数 post_logout_redirect_uri
和用于登录的 ID Token 时,可以省略确认并自动重定向到应用程序。
现有部署会受到以下方法影响:
-
如果您的应用程序直接使用到使用
redirect_uri
参数进行注销端点的链接,您可能需要更改如上所述。请考虑可以完全删除redirect_uri
参数,或使用id_token_hint
和post_logout_redirect_uri
参数替换。 -
如果您使用 java 适配器,且应用程序会调用
httpServletRequest.logout()
进行注销,则您不受影响,因为这个调用使用了注销端点的 backchannel 变体,且没有更改。 -
如果您使用最新的 javascript 适配器,您也不受影响。但是,如果您的应用程序使用 JavaScript 适配器的旧版本,您会受到影响,因为此适配器使用了已弃用的
redirect_uri
参数的注销端点变体。在这种情况下,您可能需要升级到 JavaScript 适配器的最新版本。 -
对于 Node.js 适配器,与 JavaScript 适配器相同。建议您更新到最新版本,因为较老的适配器版本使用已弃用的
redirect_uri
参数。使用最新的 Node.js 适配器时,只要您根据/logout
URL 使用注销 URL 或 Node.js 适配器示例所述,您不会受到这个安全漏洞的影响。但是,当应用程序直接使用 methodkeycloak.logoutUrl
时,您可以考虑将idTokenHint
添加为此方法的第二个参数。在这个版本中,在这个版本中添加了idTokenHint
作为第二个参数。idTokenHint
需要是登录期间获得的有效 ID 令牌。添加idTokenHint
是可选的,但如果省略它,则您需要确认注销屏幕,如前面所述。另外,在注销后,它们不会重定向到应用程序。
有一个后向兼容选项,它允许您的应用程序仍然使用 redirect_uri
参数的旧格式。
您可以通过在 standalone-*.xml
文件中包括以下配置来启用这个参数
<spi name="login-protocol"> <provider name="openid-connect" enabled="true"> <properties> <property name="legacy-logout-redirect-uri" value="true"/> </properties> </provider> </spi>
使用这个配置,您仍然可以将格式与 redirect_uri
参数搭配使用。请注意,如果省略 id_token_hint
,则需要确认屏幕。
以后的一些版本中将删除后向兼容开关。建议您尽可能立即更新您的客户端,而不是依赖这个交换机。
2.1.3. 删除 upload-scripts
功能
以前版本的 Red Hat Single Sign-On 支持通过管理控制台和 REST API 等管理界面来管理 JavaScript 代码。从此版本开始,您现在应该将脚本部署到服务器,以配置以下供应商:
- OpenID Connect Scriptmapper
- 脚本身份验证器(身份验证执行)
- JavaScript 策略
有关如何将脚本部署到服务器的详细信息,请参阅文档。请注意,要使用脚本,您仍需要启用 脚本
技术预览功能。
./standalone.sh -Dkeycloak.profile=preview
在部署脚本时,服务器将自动创建对应的供应商,以便您可以配置身份验证流程、映射程序和授权策略时选择它们。
通常,更新您的域的步骤如下:
- 在升级前,删除您要使用的任何脚本供应商。
- 升级后,请按照 文档 中的说明部署脚本。
- 更新身份验证流程、映射程序和客户端授权设置,以使用从部署到服务器的脚本创建的提供程序。
2.1.4. 帐户控制台模式升级
Patternfly(PF)React 库已被更新,@patternfly/react-core
从 v3.153.3 升级到 v4.147.0, @patternfly/react-icons
from v3.15.16,将 @patternfly/react-styles
从 v3.7.14 变为 v4.11.8。进行了几个 UI 更新,使帐户控制台与 PF 设计标准一致。
自定义开发的帐户 UI 可能会因为 PF 中的破坏更改而与这些更新不兼容。大多数有问题的更改应该通过更新 PF 组件来改变。
resources:
- [Patternfly docs](https://www.patternfly.org)
已知有破坏更改的组件:
- 警报
-
action
prop 改为actionClose
- 可扩展
-
重命名为
ExpandableSection
- 标题
-
大小 attr 现在使用
TitleSizes
- DataListContent
-
noPadding
更改为具有NoPadding
- Grid, Stack, Level, Gallery
-
gutter
attr 更改为hasGutter
- 模态
-
从中更改大小控制(例如,
isLarge
)以使用ModalVariant
,例如 ModalVariant={ModalVariant.large}
- 选择
-
ariaLabelTypeAhead
totypeAheadAriaLabel
-
正在展开为
"展开"
-
ariaLabelledBy
toaria-labelledby
- DataListContent
-
NoPadding
tohasNoPadding
2.1.5. 客户端策略迁移:客户端范围
如果您使用了策略,包括客户端范围条件并直接编辑的 JSON 文档,则需要在 JSON 文档中将 "scope" 字段名称更改为"scopes"。
2.1.6. Liquibase 升级到 4.6.2 版本
Liquibase 从 3.5.5 版本更新至 4.6.2,其中包括一些程序错误、一些程序错误修复以及使用 ServiceLoader
注册自定义扩展的新方法。
遵循 升级指南,特别是在升级前备份现有数据库。虽然我们最好测试 Liquibase 升级的结果,但有些安装可能会对我们使用特定的设置未知。
2.1.7. Red Hat Single Sign-On Operator 中的已弃用的功能
在这个版本中,我们已在 Red Hat Single Sign-On Operator 的 Keycloak CR 中弃用了 podDisruptionBudget
字段。当 Operator 部署到 OCP 4.12 及更高版本中时,此可选字段将被忽略。
作为临时解决方案,您可以在集群中创建 Pod Disruption Budget,例如:
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: labels: app: keycloak name: keycloak spec: maxUnavailable: 1 selector: matchLabels: component: keycloak
另请参阅 Kubernetes 文档。
2.1.8. Red Hat Single Sign-On Operator 中的关键程序错误修复
由于之前版本的 Operator 中存在一个关键错误,RH-SSO StatefulSet 上的 Selector
字段配置错误。错误配置可能会破坏升级过程从 7.5 到 7.6,从而会阻止成功进行 RH-SSO 部署。
随着 Operator 补丁发行版本,我们引入了一个修复程序。请注意,作为修复 Operator 的一部分,在从 7.5 升级到 7.6 的过程中可能会 删除并重新创建 RH-SSO StatefulSet。要使修复正常工作,请确定您使用 重新创建
的升级策略。请参阅 服务器安装和配置指南中的相关章节。
2.1.9. 使用 Red Hat Single Sign-On Operator 7.6.2 时探测的更改
为了与 7.6.2 中引入的 Red Hat Single Sign-On OpenShift 镜像中的更改一致,Operator 现在利用镜像中默认的存活度和就绪度探测,而不是使用自定义探测。对于现有的 Red Hat Single Sign-On 部署,Operator 将在升级过程中尝试自动更新探测。但是,如果您通过手动更改 keycloak-probes
ConfigMap 来自定义探测,Operator 不会更新探测以避免覆盖用户修改。在这种情况下,您必须手动更新探测(或删除 ConfigMap 以便 Operator 重新创建它);否则升级的 Red Hat Single Sign-On 7.6.2 部署将显示为未就绪。
2.1.10. 在使用 Red Hat Single Sign-On Operator 7.6.5 时,会更改探测
为了允许在启用了 FIPS 的环境中运行,探测验证哈希算法已改变。对于探测的默认超时为 1 秒的基于模板的安装,并且指定了小于 1 的 CPU 限值,这可能会导致持续探测失败。如果这些失败会导致重启,您应该通过更改 DeploymentConfig 或实际到新发布的模板来增加探测超时,这与 Operator 中使用的内容有更大的超时值。
2.1.11. 不建议在帐户控制台版本 1 中使用步骤验证
帐户控制台 V1 与步骤身份验证相关的限制。问题是,用户可以使用密码对帐户控制台版本 1 进行身份验证,然后将 TOTP 凭证添加到用户或删除现有的 TOTP 凭证。这种情况意味着,管理给用户密码的任何人都可以通过添加另一个 TOTP 来绕过用户的第二因素身份验证。帐户控制台版本 2 不会出现此问题(如 Red Hat Single Sign-On 7.6.8 支持)。该版本始终强制用户与要添加或删除相应级别的凭证进行身份验证。
最好在使用步骤验证时避免使用帐户控制台版本 1。如果帐户主题明确切换到 keycloak
主题,则帐户控制台版本 1 可以正常工作。