如果已启用单一登录,请使用 StorageGRID API(Active Directory)
如果已启用 "已配置并启用单点登录(SSO)" 并将 Active Directory 用作 SSO 提供程序,则必须发出一系列 API 请求,以获取对网格管理 API 或租户管理 API 有效的身份验证令牌。
如果启用了单点登录,请登录到 API
如果您使用 Active Directory 作为 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 方法。输入 ADFS 或 adfs。
-
SSO 用户名
-
安装 StorageGRID 的域
-
StorageGRID 的地址
-
租户帐户 ID(如果要访问租户管理 API)。

StorageGRID 授权令牌在输出中提供。您现在可以将令牌用于其他请求,类似于在未使用 SSO 的情况下使用 API 的方式。
-
-
如果要使用 curl 请求,请使用以下过程。
-
声明登录所需的变量。
export SAMLUSER='my-sso-username' export SAMLPASSWORD='my-password' export SAMLDOMAIN='my-domain' export TENANTACCOUNTID='12345' export STORAGEGRID_ADDRESS='storagegrid.example.com' export AD_FS_ADDRESS='adfs.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://adfs.example.com/adfs/ls/?SAMLRequest=fZHLbsIwEEV%2FJTuv7...sSl%2BfQ33cvfwA%3D&RelayState=12345", "responseTime": "2018-11-06T16:30:23.355Z", "status": "success" } -
从响应中保存
SAMLRequest,以便在后续命令中使用。export SAMLREQUEST='fZHLbsIwEEV%2FJTuv7...sSl%2BfQ33cvfwA%3D' -
从 AD FS 获取包含客户端请求 ID 的完整 URL。
一种选择是使用上一个响应中的 URL 请求登录表单。
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID" | grep 'form method="post" id="loginForm"'响应包括客户端请求 ID:
<form method="post" id="loginForm" autocomplete="off" novalidate="novalidate" onKeyPress="if (event && event.keyCode == 13) Login.submitLoginRequest();" action="/adfs/ls/? SAMLRequest=fZHRToMwFIZfhb...UJikvo77sXPw%3D%3D&RelayState=12345&client-request-id=00000000-0000-0000-ee02-0080000000de" >
-
从响应中保存客户端请求 ID。
export SAMLREQUESTID='00000000-0000-0000-ee02-0080000000de' -
将您的凭据发送到上一个响应的表单操作。
curl -X POST "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID&client-request-id=$SAMLREQUESTID" \ --data "UserName=$SAMLUSER@$SAMLDOMAIN&Password=$SAMLPASSWORD&AuthMethod=FormsAuthentication" --includeAD FS返回302重定向,标头中包含其他信息。
如果您的 SSO 系统启用了多因素身份验证 (MFA),表单提交内容中也会包含第二个密码或其他凭据。 HTTP/1.1 302 Found Content-Length: 0 Content-Type: text/html; charset=utf-8 Location: https://adfs.example.com/adfs/ls/?SAMLRequest=fZHRToMwFIZfhb...UJikvo77sXPw%3D%3D&RelayState=12345&client-request-id=00000000-0000-0000-ee02-0080000000de Set-Cookie: MSISAuth=AAEAADAvsHpXk6ApV...pmP0aEiNtJvWY=; path=/adfs; HttpOnly; Secure Date: Tue, 06 Nov 2018 16:55:05 GMT
-
从响应中保存
MSISAuthCookie。export MSISAuth='AAEAADAvsHpXk6ApV...pmP0aEiNtJvWY=' -
使用来自身份验证 POST 的 Cookie 将 GET 请求发送到指定位置。
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID&client-request-id=$SAMLREQUESTID" \ --cookie "MSISAuth=$MSISAuth" --include响应标头将包含 AD FS 会话信息,以供以后注销使用,响应正文在隐藏表单字段中包含 SAMLResponse。
HTTP/1.1 200 OK Cache-Control: no-cache,no-store Pragma: no-cache Content-Length: 5665 Content-Type: text/html; charset=utf-8 Expires: -1 Server: Microsoft-HTTPAPI/2.0 P3P: ADFS doesn't have P3P policy, please contact your site's admin for more details Set-Cookie: SamlSession=a3dpbnRlcnMtUHJpbWFyeS1BZG1pbi0xNzgmRmFsc2Umcng4NnJDZmFKVXFxVWx3bkl1MnFuUSUzZCUzZCYmJiYmXzE3MjAyZTA5LThmMDgtNDRkZC04Yzg5LTQ3NDUxYzA3ZjkzYw==; path=/adfs; HttpOnly; Secure Set-Cookie: MSISAuthenticated=MTEvNy8yMDE4IDQ6MzI6NTkgUE0=; path=/adfs; HttpOnly; Secure Set-Cookie: MSISLoopDetectionCookie=MjAxOC0xMS0wNzoxNjozMjo1OVpcMQ==; path=/adfs; HttpOnly; Secure Date: Wed, 07 Nov 2018 16:32:59 GMT <form method="POST" name="hiddenform" action="https://storagegrid.example.com:443/api/saml-response"> <input type="hidden" name="SAMLResponse" value="PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4=" /><input type="hidden" name="RelayState" value="12345" />
-
从隐藏字段中保存
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。如果您将 Active Directory 用作 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://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D", "responseTime": "2018-11-20T22:20:30.839Z", "status": "success" } -
保存注销 URL。
export LOGOUT_REQUEST='https://adfs.example.com/adfs/ls/?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: MSISSignoutProtocol=U2FtbA==; expires=Tue, 20 Nov 2018 22:35:03 GMT; path=/adfs; HttpOnly; Secure
-
删除 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