第 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 令牌(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 提供程序使用管理门户来设置身份验证流程。
- 如果 3scale 管理的 API 没有通过标准 API 密钥或应用程序标识符和密钥对验证请求,则 API 供应商必须与 OpenID Connect 身份提供程序集成。在下图中,OpenID Connect 身份提供程序是 Red Hat Single Sign-On (RH-SSO)。
- 配置身份验证及实时开发人员门户后,API 消费者使用您的开发人员门户来订阅应用程序计划,以便访问特定的 3scale API 产品。
- 当 OpenID Connect 与 3scale 集成时,订阅会触发 API 使用者应用的配置流,以获取 OpenID Connect 身份提供程序中的 JSON Web Tokens (JWT)。当将 API 产品配置为使用 OpenID Connect 时,API 供应商指定这个流。
图 12.1. 显示 OpenID Connect 身份提供程序的主要 3scale 组件
订阅应用程序计划后,API 使用者会从集成的 OpenID Connect 身份提供程序接收身份验证凭据。这些凭证支持对 API 消费者应用程序发送到上游 API 的请求进行身份验证,这是由 API 使用者可访问的 3scale API 产品提供的 API。
凭证包括客户端 ID 和客户端 secret。由 API 使用者创建的应用使用这些凭据从 OpenID Connect 身份提供程序中获取 JSON Web Token (JWT)。当您配置 3scale 与 OpenID Connect 集成时,您可以选择 API 消费者应用程序如何获取 JWT 的操作。在使用带有 RH-SSO 的默认 授权代码 流的 API 消费者应用程序中,应用程序必须执行以下操作:
- 在第一个请求到上游 API 后端之前,使用 OpenID Connect 身份提供程序启动 OAuth 授权流。授权代码流将最终用户重定向到 RH-SSO。最终用户登录以获取授权代码。
- 交换 JWT 的授权代码。
- 根据身份验证,从 RH-SSO 接收 JWT。
- 发送包含 JWT 的 API 请求到上游 API 后端。
- 发送带有相同 JWT 的 API 请求,直到其过期为止。
- 刷新 JWT 或发送新请求到 OpenID Connect 身份提供程序,以获取新的 JWT。所需的操作取决于 OpenID Connect 身份提供程序。
APIcast 从 API 用户接收请求并检查请求的 JWT。如果 APIcast 验证 JWT,APIcast 将请求(包括 JWT )发送到上游 API 后端。
图 12.2. 显示 OpenID Connect 身份提供程序是 RH-SSO,但可以与其他 OpenID Connect 身份提供程序进行配置。