12.7. 3scale 与 OpenID Connect 身份提供程序集成示例

本例演示了在 3scale 与 Red Hat Single Sign-On(RH-SSO)集成时的流程作为 OpenID Connect 身份提供程序。这个示例有以下特征:

  • 在 Admin Portal 中,API 供应商定义了一个 3scale API 产品,并将该产品配置为使用 RH-SSO 作为 OpenID Connect 身份提供程序。
  • 这个产品的 OpenID Connect 配置包括:

    • 公共基本 URL :https://api.example.com
    • 私有基本 URL :https://internal-api.example.com
    • OpenID Connect Issuer: https://zync:/auth/realms/myrealm
    • 选择 授权代码流 (即标准流)。
  • 在 3scale Developer Portal 中,有以下特征:此应用程序是 API 消费者订阅访问 Developer 门户中特定应用程序计划提供的 3scale API 产品的结果。

    • 客户端 IDmyclientid
    • 客户端 Secretmyclientsecret
    • 重定向 URL:https://myapp.example.com
  • 在 RH-SSO 中,在 myrealm 域中,有具有以下特征的客户端:

    • 客户端 IDmyclientid
    • 客户端 Secretmyclientsecret
    • 重定向 URL:https://myapp.example.com
  • myrealm realm 具有这个用户:

    • Username: myuser
    • Password: mypassword
  • myrealm 中的 3scale Zync 客户端具有正确的 服务帐户 角色

流程如下:

  1. 最终用户(API consumer)将在以下端点上向身份验证服务器(RH-SSO)发送授权请求:

    https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/auth

    在请求中,应用程序提供这些参数:

    • 客户端 ID: myclientid
    • 重定向 URL :https://myapp.example.com
  2. 应用将 end-user 重定向到 RH-SSO 登录窗口。
  3. end-user 用户使用这些凭证登录到 RH-SSO:

    • Username: myuser
    • Password: mypassword
  4. 根据配置,以及是否首次在此特定应用验证最终用户时,可能会显示同意窗口。
  5. RH-SSO 为最终用户发出授权代码。
  6. API 消费者应用使用以下端点来发送请求,以交换 JWT 的授权代码:

    https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/token

    请求包含授权代码和这些参数:

    • 客户端 ID: myclientid
    • 客户端 secret: myclientsecret
    • 重定向 URL :https://myapp.example.com.
  7. RH-SSO 返回带有 access_token 字段的 JSON Web Token(JWT),如 eyJhbGciOiJSUzI1NiIsInR5cCIgOiSldUIiwia2lk…xBArNhqF-A
  8. API 消费者应用程序向 https://api.example.com 发送一个 API 请求,其中包含以下标头:

    Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lk…xBArNhqF-A.
  9. 该应用应该会收到来自 https://internal-api.example.com 的成功响应。