第 12 章 将 3scale 与 OpenID Connect 身份提供程序集成

为验证 API 请求,3scale 可以和符合 OpenID Connect 规格的身份提供程序集成。为了与 3scale 完整兼容,身份提供程序可以是 Red Hat Single Sign-On(RH-SSO) 或实施 默认 Keycloak 客户端注册的 第三方身份提供程序。为了与 3scale API 网关(APIcast)兼容,可以使用任何实现 OpenID Connect 的用户身份供应商。

注意

3scale 不使用 RFC 7591 Dynamic Client Registration Mechanism。对于 3scale 和 OpenID Connect 身份提供程序之间的完全兼容性,它依赖于默认 Keycloak 客户端注册。

OpenID Connect 的基础是 OAuth 2.0 授权框架 (RFC 6749)。OpenID Connect 在 API 请求中使用 JSON Web Token(JWT)(RFC 7519) 以验证该请求。当您将 3scale 与 OpenID Connect 身份提供程序集成时,进程有两个主要部分:

  • APIcast 在请求中解析和验证 JWT。如果成功,APIcast 验证 API 消费者客户端应用的身份。
  • 3scale Zync 组件将 3scale 应用程序详情与 OpenID Connect 身份提供程序同步。

当 RH-SSO 是 OpenID Connect 身份提供程序时,3scale 支持这两个集成点。请参阅 支持的 Configurations 页面中的 RH-SSO 版本。但是,RH-SSO 并不是必需的。您可以使用支持 OpenID Connect 规格和默认 Keycloak 客户端注册的任何身份提供程序。APIcast 集成与 RH-SSO 和 ForgeRock 测试。

以下小节提供了配置 3scale 以使用 OpenID Connect 身份提供程序的信息和说明:

12.1. 集成 3scale 和 OpenID Connect 身份提供程序概述

每个主 3scale 组件都参与身份验证,如下所示:

  • APIcast 验证 API 消费者应用提供的身份验证令牌的真实性。在默认的 3scale 部署中,APIcast 可以做到这一点,因为它实现了 API 产品的 OpenID Connect 配置自动发现。
  • API 供应商使用 Admin Portal 设置身份验证流程。
  • 如果 3scale 管理的 API 没有使用标准 API 密钥或应用程序标识符和密钥对验证请求,那么 API 供应商必须与 OpenID Connect 身份提供程序集成。在下图中,OpenID Connect 身份提供程序是红帽单点登录(RH-SSO)。
  • 通过配置了身份验证和实时开发人员门户,API 使用者使用开发者门户订阅应用程序计划,提供对特定 3scale API 产品的访问。
  • 当 OpenID Connect 与 3scale 集成时,订阅会触发 API 消费者应用程序的配置流,以获取来自 OpenID Connect 身份提供程序的 JSON Web 令牌 (JWT)。API 供应商在配置 API 产品以使用 OpenID Connect 时指定这个流。

图 12.1. 显示带有 OpenID Connect 身份提供程序的主要 3scale 组件

带有 OpenID Connect 身份提供程序的主要 3scale 组件

订阅应用程序计划后,API 使用者会从集成的 OpenID Connect 身份提供程序中接收身份验证凭据。这些凭据支持对 API 消费者应用发送到上游 API 的请求进行身份验证,这是 API 使用者有权访问的 3scale API 产品提供的 API。

凭证包括客户端 ID 和客户端 secret。由 API 使用者创建的应用使用这些凭证从 OpenID Connect 身份提供程序中获取 JSON Web 令牌 (JWT)。当您配置 3scale 与 OpenID Connect 集成时,您可以选择 API 消费者应用如何获取 JWT 的流。在通过 RH-SSO 使用默认 授权代码 流的 API 使用者应用程序中,应用程序必须执行以下操作:

  1. 在第一个请求上游 API 后端前,启动使用 OpenID Connect 身份提供程序的 OAuth 授权流。授权代码流将最终用户重定向到 RH-SSO。最终用户登录,以获取授权代码。
  2. 交换 JWT 的授权代码。
  3. 身份验证时从 RH-SSO 接收 JWT。
  4. 发送包含 JWT 的 API 请求到上游 API 后端。
  5. 使用同一 JWT 发送后续的 API 请求,直到其过期。
  6. 刷新 JWT 或向 OpenID Connect 身份提供程序发送新请求,以获取新的 JWT。需要哪个操作取决于 OpenID Connect 身份提供程序。

APIcast 从 API 用户接收请求并检查请求中的 JWT。如果 APIcast 验证 JWT,APIcast 会将请求(包括 JWT)发送到上游 API 后端。

图 12.2. 显示 OpenID Connect 身份提供程序是 RH-SSO,但可能配置了其他 OpenID Connect 身份提供程序。

API 请求身份验证