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:41dbb98b-e4e9-4a89-84a3-91d1d19c4207@idp.example.com/auth/realms/myrealm - 选择 授权代码流 (即标准流)。
-
公共基本 URL:
在 3scale Developer Portal 中,有以下特征:此应用程序是 API 消费者订阅访问 Developer 门户中特定应用程序计划提供的 3scale API 产品的结果。
-
客户端 ID :
myclientid -
客户端 Secret :
myclientsecret -
重定向 URL:
https://myapp.example.com
-
客户端 ID :
在 RH-SSO 中,在
myrealm域中,有具有以下特征的客户端:-
客户端 ID :
myclientid -
客户端 Secret :
myclientsecret -
重定向 URL:
https://myapp.example.com
-
客户端 ID :
myrealmrealm 具有这个用户:-
用户名:
myuser -
密码:
mypassword
-
用户名:
-
myrealm中的 3scale Zync 客户端具有正确的 服务帐户 角色
流程如下:
最终用户 (API consumer) 将在以下端点上向身份验证服务器 (RH-SSO) 发送授权请求:
https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/auth
https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/authCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在请求中,应用程序提供这些参数:
-
客户端 ID:
myclientid -
重定向 URL:
https://myapp.example.com
-
客户端 ID:
- 应用将 end-user 重定向到 RH-SSO 登录窗口。
最终用户使用这些凭证登录到 RH-SSO:
-
用户名:
myuser -
密码:
mypassword
-
用户名:
- 根据配置,以及是否首次在此特定应用验证最终用户时,可能会显示同意窗口。
- RH-SSO 为最终用户发出授权代码。
API 消费者应用使用以下端点来发送请求,以交换 JWT 的授权代码:
https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/token
https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请求包含授权代码和这些参数:
-
客户端 ID:
myclientid -
客户端 secret:
myclientsecret -
重定向 URL:
https://myapp.example.com.
-
客户端 ID:
-
RH-SSO 返回带有 access_token 字段的 JSON Web Token(JWT),如
eyJhbGciOiJSUzI1NiIsInR5cCIgOiSldUIiwia2lk…xBArNhqF-A。 API 消费者应用程序向
https://api.example.com发送一个 API 请求,其中包含以下标头:Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lk…xBArNhqF-A.
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lk…xBArNhqF-A.Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
该应用应该会收到来自
https://internal-api.example.com的成功响应。