如果已启用单一登录,请使用 StorageGRID API (PingFederate)
如果具有"已配置并启用单点登录(SSO)"并使用 PingFederate 作为 SSO 提供程序,则必须发出一系列 API 请求,以获取对网格管理 API 或租户管理 API 有效的身份验证令牌。
如果启用了单点登录,请登录到 API
如果您使用 PingFederate 作为 SSO 身份提供商,则适用以下说明
-
您知道属于 StorageGRID 用户组的联合用户的 SSO 用户名和密码。
-
如果要访问租户管理 API,则需要知道租户帐户 ID。
可以使用以下示例之一获取身份验证令牌:
-
该
storagegrid-ssoauth.pyPython 脚本位于 StorageGRID 安装文件目录中(RHEL 为(./rpms,./debs适用于 Ubuntu 或 Debian,VMware 为./vsphere)。 -
curl 请求的示例工作流。
如果执行太慢,curl 工作流可能会超时。您可能会看到以下错误:
A valid SubjectConfirmation was not found on this Response。示例 curl 工作流程不会保护密码免遭其他用户查看。 如果您遇到 URL 编码问题,则可能会看到错误:
Unsupported SAML version。
-
选择以下方法之一以获取身份验证令牌:
-
使用
storagegrid-ssoauth.pyPython 脚本。转至第 2 步。 -
使用 curl 请求。转到步骤 3。
-
-
如果要使用 `storagegrid-ssoauth.py`脚本,请将脚本传递给 Python 解释器并运行脚本。
出现提示时,请输入以下参数的值:
-
SSO 方法。您可以输入"pingfederate"的任何变体(PINGFEDERATE、pingfederate 等)。
-
SSO 用户名
-
安装 StorageGRID 的域。此字段不用于 PingFederate。您可以将其留空或输入任何值。
-
StorageGRID 的地址
-
租户帐户 ID(如果要访问租户管理 API)。

StorageGRID 授权令牌在输出中提供。您现在可以将令牌用于其他请求,类似于在未使用 SSO 的情况下使用 API 的方式。
-
-
如果要使用 curl 请求,请使用以下过程。
-
声明登录所需的变量。
export SAMLUSER='my-sso-username' export SAMLPASSWORD='my-password' export TENANTACCOUNTID='12345' export STORAGEGRID_ADDRESS='storagegrid.example.com'要访问 Grid Management API,请使用 0 作为 TENANTACCOUNTID。 -
若要接收已签名的身份验证 URL,请向 `/api/v3/authorize-saml`发出 POST 请求,并从响应中删除其他 JSON 编码。
此示例显示了对 TENANTACCOUNTID 的签名身份验证 URL 的 POST 请求。结果将传递到 python -m json.tool 以删除 JSON 编码。
curl -X POST "https://$STORAGEGRID_ADDRESS/api/v3/authorize-saml" \ -H "accept: application/json" -H "Content-Type: application/json" \ --data "{\"accountId\": \"$TENANTACCOUNTID\"}" | python -m json.tool此示例的响应包括经过 URL 编码的签名 URL,但不包括附加的 JSON 编码层。
{ "apiVersion": "3.0", "data": "https://my-pf-baseurl/idp/SSO.saml2?...", "responseTime": "2018-11-06T16:30:23.355Z", "status": "success" } -
从响应中保存
SAMLRequest,以便在后续命令中使用。export SAMLREQUEST="https://my-pf-baseurl/idp/SSO.saml2?..."
-
导出响应和 cookie,并回显响应:
RESPONSE=$(curl -c - "$SAMLREQUEST")echo "$RESPONSE" | grep 'input type="hidden" name="pf.adapterId" id="pf.adapterId"' -
导出"pf.adapterId"值,并回显响应:
export ADAPTER='myAdapter'
echo "$RESPONSE" | grep 'base' -
导出"href"值(删除尾部斜杠 /),并回显响应:
export BASEURL='https://my-pf-baseurl'
echo "$RESPONSE" | grep 'form method="POST"' -
导出"action"值:
export SSOPING='/idp/.../resumeSAML20/idp/SSO.ping'
-
将Cookie与凭据一起发送:
curl -b <(echo "$RESPONSE") -X POST "$BASEURL$SSOPING" \ --data "pf.username=$SAMLUSER&pf.pass=$SAMLPASSWORD&pf.ok=clicked&pf.cancel=&pf.adapterId=$ADAPTER" --include -
从隐藏字段中保存
SAMLResponse:export SAMLResponse='PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4=' -
使用保存的
SAMLResponse,发出 StorageGRID/api/saml-response请求以生成 StorageGRID 身份验证令牌。对于
RelayState,请使用租户帐户 ID,或者如果要登录到 Grid Management API,请使用 0。curl -X POST "https://$STORAGEGRID_ADDRESS:443/api/saml-response" \ -H "accept: application/json" \ --data-urlencode "SAMLResponse=$SAMLResponse" \ --data-urlencode "RelayState=$TENANTACCOUNTID" \ | python -m json.tool响应包括身份验证令牌。
{ "apiVersion": "3.0", "data": "56eb07bf-21f6-40b7-af0b-5c6cacfb25e7", "responseTime": "2018-11-07T21:32:53.486Z", "status": "success" }-
将响应中的身份验证令牌另存为
MYTOKEN。export MYTOKEN="56eb07bf-21f6-40b7-af0b-5c6cacfb25e7"现在,您可以将 `MYTOKEN`用于其他请求,类似于在未使用 SSO 的情况下使用 API 的方式。
-
如果已启用单一登录,则注销 API
如果已启用单点登录 (SSO),则必须发出一系列 API 请求以注销网格管理 API 或租户管理 API。如果您使用 PingFederate 作为 SSO 身份提供商,则适用以下说明
如果需要,您可以通过从组织的单点注销页面注销来退出 StorageGRID API。或者,您可以从 StorageGRID 触发单点注销 (SLO),这需要有效的 StorageGRID 承载令牌。
-
要生成已签名的注销请求,请将
cookie "sso=true"传递给 SLO API:curl -k -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \ -H "accept: application/json" \ -H "Authorization: Bearer $MYTOKEN" \ --cookie "sso=true" \ | python -m json.tool返回注销 URL:
{ "apiVersion": "3.0", "data": "https://my-ping-url/idp/SLO.saml2?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D", "responseTime": "2021-10-12T22:20:30.839Z", "status": "success" } -
保存注销 URL。
export LOGOUT_REQUEST='https://my-ping-url/idp/SLO.saml2?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D' -
向注销 URL 发送请求以触发 SLO 并重定向回 StorageGRID。
curl --include "$LOGOUT_REQUEST"返回 302 响应。重定向位置不适用于仅限 API 的注销。
HTTP/1.1 302 Found Location: https://$STORAGEGRID_ADDRESS:443/api/saml-logout?SAMLResponse=fVLLasMwEPwVo7ss%...%23rsa-sha256 Set-Cookie: PF=QoKs...SgCC; Path=/; Secure; HttpOnly; SameSite=None
-
删除 StorageGRID 承载令牌。
删除 StorageGRID 承载令牌的工作方式与没有 SSO 的工作方式相同。如果未提供 `cookie "sso=true",则用户将从 StorageGRID 注销,而不会影响 SSO 状态。
curl -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \ -H "accept: application/json" \ -H "Authorization: Bearer $MYTOKEN" \ --includeA
204 No Content响应表示用户现已注销。HTTP/1.1 204 No Content