搜索

第 5 章 迁移由 Red Hat Single Sign-On 7.6 保护的应用程序

download PDF

Red Hat build of Keycloak 引入了对应用程序使用一些 Red Hat Single Sign-On 7.6 Client Adapters 的关键更改。

除了不再释放一些客户端适配器外,红帽构建的 Keycloak 还引入了修复和改进,影响客户端应用程序如何使用 OpenID Connect 和 SAML 协议。

在本章中,您将找到解决这些更改的说明,并迁移应用程序以与红帽构建的 Keycloak 集成。

5.1. 迁移 OpenID Connect 客户端

从此 Red Hat build of Keycloak 开始,以下 Java Client OpenID Connect Adapters 不再发布

  • Red Hat JBoss Enterprise Application Platform 6.x
  • Red Hat JBoss Enterprise Application Platform 7.x
  • Spring Boot
  • Red Hat Fuse

与首次发布这些适配器相比,OpenID Connect 现在可在 Java 生态系统中广泛使用。此外,使用技术堆栈中提供的功能(如应用服务器或框架)可以实现更好的互操作性和支持。

这些适配器已结束其生命周期,且仅在 Red Hat Single Sign-On 7.6 中提供。强烈建议您寻找替代方案,以便应用程序使用 OAuth2 和 OpenID 连接协议的最新更新进行更新。

5.1.1. OpenID Connect 协议和客户端设置中的密钥更改

5.1.1.1. 访问类型客户端选项不再可用

当您创建或更新 OpenID Connect 客户端时,Access Type 不再可用。但是,您可以使用其他方法来实现此功能。

  • 要达到 Bearer Only 功能,请创建一个没有身份验证流的客户端。在客户端详情的 Capability config 部分中,确保没有选择流。客户端无法从 Keycloak 获取任何令牌,这等同于使用 Bearer Only 访问类型。
  • 要实现 公共 功能,请确保为此客户端禁用客户端身份验证,并且至少启用了一个流。
  • 要实现 机密 功能,请确保 为客户端 启用客户端身份验证,并且至少启用了一个流。

客户端 JSON 对象上仍然存在 bearerOnlypublicClient。它们可用于在管理员 REST API 创建或更新客户端时使用,或者在通过部分导入或域导入时导入此客户端时使用。但是,这些选项不能直接在管理控制台 v2 中提供。

5.1.1.2. 验证有效重定向 URI 的方案的更改

如果应用程序客户端使用非 http (s)自定义方案,验证现在需要有效的重定向模式明确允许该方案。允许自定义方案的示例模式为 custom:/test, custom:/test decisions 或 custom:。为了安全起见,常规模式(如 * )不再涵盖它们。

5.1.1.3. 支持 OpenID Connect Logout 端点中的 client_id 参数

支持 client_id 参数,它基于 OIDC RP-Initiated Logout 1.0 规格。此功能可用于检测在 id_token_hint 参数无法使用哪些客户端时用于 Post Logout Redirect URI 验证。当只使用了不带参数 id_token_hint 的情况下使用 client_id 参数时,才会向用户显示注销确认屏幕,因此如果他们不希望注销确认屏幕为用户显示 logout 确认屏幕,则鼓励客户端使用 id_token_hint 参数。

5.1.2. 有效的 Post Logout Redirect URI

Valid Post Logout Redirect URIs 配置选项添加到 OIDC 客户端,并与 OIDC 规格保持一致。您可以在登录和注销后,使用一组不同的重定向 URI 进行重定向。用于 Valid Post Logout Redirect URIs 的值 + 表示注销使用与 Valid Redirect URIs 选项的相同集合。由于向后兼容性,这个更改还与从以前的版本迁移时的默认行为匹配。

5.1.2.1. userinfo 端点更改

5.1.2.1.1. 错误响应更改

UserInfo 端点现在返回与 RFC 6750 完全兼容的错误响应(OAuth 2.0 Authorization Framework: Bearer Token Usage)。错误代码和描述(如果可用)以 WWW-Authenticate challenge 属性而不是 JSON 对象字段提供。

根据错误条件,响应如下:

  • 如果没有提供访问令牌:

    401 Unauthorized
    WWW-Authenticate: Bearer realm="myrealm"
  • 如果同时使用多种方法来提供访问令牌(如 Authorization 标头 + POST access_token 参数),或 POST 参数会被重复:

    400 Bad Request
    WWW-Authenticate: Bearer realm="myrealm", error="invalid_request", error_description="..."
  • 如果访问令牌缺少 openid 范围:

    403 Forbidden
    WWW-Authenticate: Bearer realm="myrealm", error="insufficient_scope", error_description="Missing openid scope"
  • 如果无法解析 UserInfo 响应签名/加密的加密密钥:

    500 Internal Server Error
  • 如果是令牌验证错误,则返回 401 Unauthorizedinvalid_token 错误代码。这个错误包括用户和客户端相关的检查,并实际捕获所有剩余的错误情况:

    401 Unauthorized
    WWW-Authenticate: Bearer realm="myrealm", error="invalid_token", error_description="..."
5.1.2.1.2. 对 UserInfo 端点的其他更改

现在,访问令牌需要具有 openid 范围,它由 UserInfo 做为特定于 OpenID Connect 的功能,而不是 OAuth 2.0。如果令牌中没有 openid 范围,则请求将被拒绝,为 403 Forbidden。请参阅上一节中。

userinfo 现在检查用户状态,并在用户被禁用时返回 invalid_token 响应。

5.1.2.1.3. 更改 Service Account 客户端的默认客户端 ID 映射器。

Service Account Client 的默认客户端 ID 映射程序已被更改。令牌 Claim Name 字段值已从 clientId 改为 client_idclient_id 声明符合 OAuth2 规格:

clientId userSession 备注仍然存在。

5.1.2.1.4. 向 OAuth 2.0/OpenID Connect Authentication Response 中添加的 iss 参数

RFC 9207 OAuth 2.0 Authorization Server Issuer Identification 规格在 OAuth 2.0/OpenID Connect Authentication Response 中添加了参数,以实现安全授权响应。

在以前的版本中,我们没有这个参数,但红帽构建的 Keycloak 默认会添加这个参数,如规格的要求。但是,一些 OpenID Connect / OAuth2 适配器(特别是旧的红帽构建的 Keycloak 适配器)可能会遇到这个新参数的问题。例如,在客户端应用成功身份验证后,参数始终存在于浏览器 URL 中。

在这些情况下,将 iss 参数添加到身份验证响应中可能会很有用。这可以在 Admin Console 中的客户端详情中针对带有 OpenID Connect 兼容性模式 的特定客户端完成。您可以启用 Exclude Issuer From Authentication Response,以防止将 iss 参数添加到身份验证响应中。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.