12.4. 将 3scale API 管理与红帽单点登录集成为 OpenID Connect 身份提供程序
作为 API 供应商,您可以将 Red Hat 3scale API Management 与 Red Hat Single Sign-On 集成,作为 OpenID Connect 身份提供程序。这里记录的流程适用于需要 OpenID Connect 进行身份验证 API 请求的 3scale API 产品。
此流程的一部分是在 3scale Zync 和 Red Hat Single Sign-On 之间建立 SSL 连接,因为 Zync 与红帽单点登录通信以交换令牌。如果您没有在 Zync 和红帽单点登录之间配置 SSL 连接,则会为侦听的任何人打开令牌。
3scale 2.2 及更新的版本支持带有 SSL_CERT_FILE 环境变量的 Red Hat Single Sign-On 的自定义 CA 证书。此变量指向证书捆绑包的本地路径。将 3scale 与红帽单点登录集成为 OpenID Connect 身份提供程序包括按以下顺序配置以下元素:
- 如果 Red Hat Single Sign-On 没有使用 由可信证书颁发机构(CA)发布的证书,您必须将 3scale Zync 配置为使用自定义 CA 证书。如果 Red Hat Single Sign-On 使用由可信 CA 发布的证书,则不需要此项。
- 配置 Red Hat Single Sign-On 以具有 3scale 客户端。
- 配置 3scale 以使用 Red Hat Single Sign-On。
先决条件
Red Hat Single Sign-On 服务器必须通过
HTTPS
提供,且必须通过zync-que
访问。要测试这一点,您可以从zync-que
pod 中运行curl https://rhsso-fqdn
,例如:$ oc rsh -n $THREESCALE_PROJECT $(oc get pods -n $THREESCALE_PROJECT --field-selector=status.phase==Running -o name | grep zync-que) /bin/bash -c "curl -v https://<rhsso-fqdn>/auth/realms/master"
- OpenShift 集群管理员权限。
- 您要配置 OpenID Connect 与红帽单点登录集成的 3scale API 产品。
详情请查看以下部分:
12.4.1. 配置 3scale API 管理 Zync 以使用自定义证书颁发机构证书
当 Red Hat Single Sign-On 使用由可信证书颁发机构(CA)发布的证书时,则不需要此项。但是,如果 Red Hat Single Sign-On 没有使用 受信任 CA 发布的证书,您必须配置 Red Hat 3scale API Management Zync,然后才能将 Red Hat Single Sign-On 配置为具有 3scale 客户端,并在配置 3scale 以使用 Red Hat Single Sign-On 前。
流程
-
以
.pem
格式获取 CA 证书链,并将每个证书保存为单独的文件,例如:customCA1.pem
、CustomCA2.pem
等等。 测试每个证书文件,以确认它是有效的 CA。例如:
$ openssl x509 -in customCA1.pem -noout -text | grep "CA:"
这个输出为
CA:TRUE
或CA:FALSE
。您希望每个证书文件为CA:TRUE
。如果输出为CA:FALSE
,则证书不是有效的 CA。使用以下
cURL
命令验证每个证书文件。例如:$ curl -v https://<secure-sso-host>/auth/realms/master --cacert customCA1.pem
将
<secure-sso-host
> 替换为 Red Hat Single Sign-On 主机的完全限定域名。预期的响应是 Red Hat Single Sign-On 域的 JSON 配置。如果验证失败,您的证书可能不正确。
在
zync-que
pod 上收集/etc/pki/tls/cert.pem
文件的现有内容:$ oc exec <zync-que-pod-id> -- cat /etc/pki/tls/cert.pem > zync.pem
将每个自定义 CA 证书文件的内容附加到
zync.pem
,例如:$ cat customCA1.pem customCA2.pem ... >> zync.pem
将新文件附加到
zync-que
pod 作为 configmap 对象:$ oc create configmap zync-ca-bundle --from-file=./zync.pem $ oc set volume dc/zync-que --add --name=zync-ca-bundle --mount-path /etc/pki/tls/zync/zync.pem --sub-path zync.pem --source='{"configMap":{"name":"zync-ca-bundle","items":[{"key":"zync.pem","path":"zync.pem"}]}}'
这会完成将证书捆绑包添加到
zync-que
pod 中。验证证书是否已附加,内容是否正确:
$ oc exec <zync-que-pod-id> -- cat /etc/pki/tls/zync/zync.pem
在 Zync 上配置
SSL_CERT_FILE
环境变量以指向新的 CA 证书捆绑包:$ oc set env dc/zync-que SSL_CERT_FILE=/etc/pki/tls/zync/zync.pem
12.4.2. 配置红帽单点登录使其具有 3scale API 管理客户端
在 OpenShift Red Hat Single Sign-On 仪表板中,将 Red Hat Single Sign-On 配置为具有 Red Hat 3scale API Management 客户端。这是特殊的管理客户端。每次 API 使用者订阅开发人员门户中的 API 时,3scale 使用您在此流程中创建的 Red Hat Single Sign-On 管理客户端来为 API 消费者应用程序创建客户端。
流程
- 在 Red Hat Single Sign-On 控制台中,为 3scale 客户端创建一个域,或选择包含 3scale 客户端的现有域。https://access.redhat.com/documentation/zh-cn/red_hat_single_sign-on/7.6/html/getting_started_guide/creating-first-realm_
- 在新的或选定域中,点左侧导航面板中的 Clients。
- 点 Create 创建新客户端。
-
在 Client ID 字段中,指定可帮助您将此客户端识别为 3scale 客户端的名称,如
oidc-issuer-for-3scale
。 -
将 Client Protocol 字段设置为
openid-connect
。 - 保存新客户端。
在新客户端的设置中,设置以下内容:
-
Access Type 为
confidential
。 -
Standard Flow Enabled 为
OFF
。 -
Direct Access Grants Enabled 为
OFF
。 Service Accounts Enabled 为
ON
。此设置可让此客户端发布服务帐户。- 点 Save。
-
Access Type 为
为客户端设置服务帐户角色:
- 导航到客户端的 Service Account Roles 选项卡。
- 在 Client Roles 下拉列表中点 realm-management。
- 在 Available Roles 窗格中,选择 manage-clients 并通过点 Add selected >> 来分配角色。
请注意客户端凭证:
-
记录客户端 ID(
<client_id>
)。 -
导航到客户端的 Credentials 选项卡,并记录 Secret 字段(
<client_secret>
)。
-
记录客户端 ID(
要协助测试授权流,请在域中添加用户:
- 在窗口的左侧,展开 Users。
- 单击 Add user。
-
输入用户名,将 Email Verified 设置为
ON
,然后点 Save。 -
在 Credentials 选项卡上,设置密码。在两个字段中输入密码,将 Temporary 开关设置为
OFF
,以避免在下次登录时重置密码,然后点 Set password。 - 出现弹出窗口时,点 Set password。
12.4.3. 配置 3scale API 管理以使用 Red Hat Single Sign-On
通过在 3scale 管理门户中指定集成设置,配置 Red Hat 3scale API 管理以使用红帽单点登录。
流程
- 在 3scale Admin Portal 中,在顶层选择器中,点 Products,再选择您要为其启用 OpenID Connect 身份验证的 3scale API 产品。
- 导航到 [Your_product_name] > Integration > Settings。
在 Authentication 下,选择 OpenID Connect Use OpenID Connect for any OAuth 2.0 flow。
图 12.3. 显示 OPENID CONNECT(OIDC)BASICS 部分。
- 在 OpenID Connect Issuer Type 字段中,确保该设置是 Red Hat Single Sign-On。
在 OpenID Connect Issuer 字段中,输入配置的 OpenID Connect 身份提供程序的 URL。这个 URL 的格式如下:
https://<client_id>:<client_secret>@<rhsso_host>:<rhsso_port>/auth/realms/<realm_name>
将占位符替换为前面记录的 Red Hat Single Sign-On 客户端凭证、Red Hat Single Sign-On 服务器的主机和端口,以及包含 Red Hat Single Sign-On 客户端的域名称。
注意要在两个不同的产品间使用相同的凭证,您必须为每个产品或同一签发者配置唯一的 OIDC 签发者,但使用不同的域。您还可以将应用程序分成 2 个单独的产品,以使用具有相同域的同一 OIDC 供应商进行身份验证。有关指导,请参阅第 5 和 6 步。
在 OIDC AUTHORIZATION FLOW 下,选择以下一个或多个:
授权代码流
在 Red Hat Single Sign-On 中,这是标准流。
- 隐式流
服务帐户流
也称为 客户端凭证流。
直接访问授予流
也称为 Resource Owner Password Credentials。
图 12.4. 显示您选择的授权流:
这将配置 API 用户如何从 OpenID Connect 身份提供程序获取 JSON Web 令牌 (JWT)。当 3scale 将 Red Hat Single Sign-On 集成为 OpenID Connect 身份提供程序时,Zync 会创建启用了 授权代码 流的 Red Hat Single Sign-On 客户端。建议将此流程作为最适合大多数情况的最安全和最合适的流程。务必选择 OpenID Connect 身份提供程序支持的 OAuth 2.0 流。
- 向下滚动并点 Update Product 以保存配置。
- 在左侧导航面板中点 Integration > Configuration。
- 向下滚动点击 Promote v.X 到 APIcast Staging。
后续步骤
测试 Red Hat Single Sign-On 作为身份提供程序的集成。当一切工作时,返回到 Integration > Configuration 页面,再向下滚动以提升 APIcast staging 版本成为生产版本。