Verwenden Sie die API, wenn Single Sign-On aktiviert ist (Active Directory).
Wenn Sie"Single Sign-On (SSO) konfiguriert und aktiviert" und Sie Active Directory als SSO-Anbieter verwenden, müssen Sie eine Reihe von API-Anfragen stellen, um ein Authentifizierungstoken zu erhalten, das für die Grid Management API oder die Tenant Management API gültig ist.
Sign in , wenn Single Sign-On aktiviert ist
Diese Anweisungen gelten, wenn Sie Active Directory als SSO-Identitätsanbieter verwenden.
-
Sie kennen den SSO-Benutzernamen und das Kennwort für einen Verbundbenutzer, der zu einer StorageGRID -Benutzergruppe gehört.
-
Wenn Sie auf die Tenant Management API zugreifen möchten, kennen Sie die Mandantenkonto-ID.
Um ein Authentifizierungstoken zu erhalten, können Sie eines der folgenden Beispiele verwenden:
-
Der
storagegrid-ssoauth.py
Python-Skript, das sich im Verzeichnis der StorageGRID Installationsdateien befindet(./rpms
für Red Hat Enterprise Linux,./debs
für Ubuntu oder Debian und./vsphere
für VMware). -
Ein Beispiel-Workflow für Curl-Anfragen.
Wenn Sie den Curl-Workflow zu langsam ausführen, kann es zu einer Zeitüberschreitung kommen. Möglicherweise wird der folgende Fehler angezeigt:
A valid SubjectConfirmation was not found on this Response
.Der beispielhafte Curl-Workflow schützt das Kennwort nicht davor, von anderen Benutzern eingesehen zu werden.
Wenn Sie ein Problem mit der URL-Kodierung haben, wird möglicherweise folgender Fehler angezeigt: Unsupported SAML version
.
-
Wählen Sie eine der folgenden Methoden aus, um ein Authentifizierungstoken zu erhalten:
-
Verwenden Sie die
storagegrid-ssoauth.py
Python-Skript. Fahren Sie mit Schritt 2 fort. -
Verwenden Sie Curl-Anfragen. Fahren Sie mit Schritt 3 fort.
-
-
Wenn Sie die
storagegrid-ssoauth.py
Skript, übergeben Sie das Skript an den Python-Interpreter und führen Sie das Skript aus.Geben Sie bei entsprechender Aufforderung Werte für die folgenden Argumente ein:
-
Die SSO-Methode. Geben Sie ADFS oder adfs ein.
-
Der SSO-Benutzername
-
Die Domäne, in der StorageGRID installiert ist
-
Die Adresse für StorageGRID
-
Die Mandantenkonto-ID, wenn Sie auf die Mandantenverwaltungs-API zugreifen möchten.
Das StorageGRID Autorisierungstoken wird in der Ausgabe bereitgestellt. Sie können das Token jetzt für andere Anfragen verwenden, ähnlich wie Sie die API verwenden würden, wenn SSO nicht verwendet würde.
-
-
Wenn Sie Curl-Anfragen verwenden möchten, gehen Sie wie folgt vor.
-
Deklarieren Sie die für die Anmeldung erforderlichen Variablen.
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'
Um auf die Grid Management API zuzugreifen, verwenden Sie 0 als TENANTACCOUNTID
. -
Um eine signierte Authentifizierungs-URL zu erhalten, senden Sie eine POST-Anfrage an
/api/v3/authorize-saml
, und entfernen Sie die zusätzliche JSON-Kodierung aus der Antwort.Dieses Beispiel zeigt eine POST-Anforderung für eine signierte Authentifizierungs-URL für
TENANTACCOUNTID
. Die Ergebnisse werden weitergeleitet anpython -m json.tool
um die JSON-Kodierung zu entfernen.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
Die Antwort für dieses Beispiel enthält eine signierte URL, die URL-codiert ist, jedoch nicht die zusätzliche JSON-Codierungsebene.
{ "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" }
-
Speichern Sie die
SAMLRequest
aus der Antwort zur Verwendung in nachfolgenden Befehlen.export SAMLREQUEST='fZHLbsIwEEV%2FJTuv7...sSl%2BfQ33cvfwA%3D'
-
Rufen Sie eine vollständige URL ab, die die Clientanforderungs-ID von AD FS enthält.
Eine Möglichkeit besteht darin, das Anmeldeformular über die URL aus der vorherigen Antwort anzufordern.
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID" | grep 'form method="post" id="loginForm"'
Die Antwort enthält die Client-Anforderungs-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" >
-
Speichern Sie die Client-Anforderungs-ID aus der Antwort.
export SAMLREQUESTID='00000000-0000-0000-ee02-0080000000de'
-
Senden Sie Ihre Anmeldeinformationen an die Formularaktion aus der vorherigen Antwort.
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" --include
AD FS gibt eine 302-Weiterleitung mit zusätzlichen Informationen in den Headern zurück.
Wenn für Ihr SSO-System die Multi-Faktor-Authentifizierung (MFA) aktiviert ist, enthält der Formularbeitrag auch das zweite Passwort oder andere Anmeldeinformationen. 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
-
Speichern Sie die
MSISAuth
Cookie aus der Antwort.export MSISAuth='AAEAADAvsHpXk6ApV...pmP0aEiNtJvWY='
-
Senden Sie eine GET-Anfrage mit den Cookies aus dem Authentifizierungs-POST an den angegebenen Speicherort.
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID&client-request-id=$SAMLREQUESTID" \ --cookie "MSISAuth=$MSISAuth" --include
Die Antwortheader enthalten AD FS-Sitzungsinformationen für die spätere Abmeldung und der Antworttext enthält die SAML-Antwort in einem ausgeblendeten Formularfeld.
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" />
-
Speichern Sie die
SAMLResponse
aus dem versteckten Feld:export SAMLResponse='PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4='
-
Mit den gespeicherten
SAMLResponse
, erstellen Sie ein StorageGRID/api/saml-response
Anforderung zum Generieren eines StorageGRID Authentifizierungstokens.Für
RelayState
, verwenden Sie die Mandantenkonto-ID oder verwenden Sie 0, wenn Sie sich bei der Grid Management API anmelden möchten.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
Die Antwort enthält das Authentifizierungstoken.
{ "apiVersion": "3.0", "data": "56eb07bf-21f6-40b7-af0b-5c6cacfb25e7", "responseTime": "2018-11-07T21:32:53.486Z", "status": "success" }
-
Speichern Sie das Authentifizierungstoken in der Antwort als
MYTOKEN
.export MYTOKEN="56eb07bf-21f6-40b7-af0b-5c6cacfb25e7"
Sie können jetzt
MYTOKEN
für andere Anfragen, ähnlich wie Sie die API verwenden würden, wenn SSO nicht verwendet würde.
-
Melden Sie sich von der API ab, wenn Single Sign-On aktiviert ist
Wenn Single Sign-On (SSO) aktiviert wurde, müssen Sie eine Reihe von API-Anfragen stellen, um sich von der Grid Management API oder der Tenant Management API abzumelden. Diese Anweisungen gelten, wenn Sie Active Directory als SSO-Identitätsanbieter verwenden
Bei Bedarf können Sie sich von der StorageGRID -API abmelden, indem Sie sich von der Single-Logout-Seite Ihrer Organisation abmelden. Oder Sie können Single Logout (SLO) von StorageGRID auslösen, wofür ein gültiges StorageGRID Bearer-Token erforderlich ist.
-
Um eine signierte Abmeldeanforderung zu generieren, übergeben Sie `cookie "sso=true" an die 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
Es wird eine Abmelde-URL zurückgegeben:
{ "apiVersion": "3.0", "data": "https://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D", "responseTime": "2018-11-20T22:20:30.839Z", "status": "success" }
-
Speichern Sie die Abmelde-URL.
export LOGOUT_REQUEST='https://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D'
-
Senden Sie eine Anfrage an die Abmelde-URL, um SLO auszulösen und zurück zu StorageGRID umzuleiten.
curl --include "$LOGOUT_REQUEST"
Die 302-Antwort wird zurückgegeben. Der Umleitungsort ist nicht auf die reine API-Abmeldung anwendbar.
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
-
Löschen Sie das StorageGRID Bearer-Token.
Das Löschen des StorageGRID Bearer-Tokens funktioniert genauso wie ohne SSO. Wenn „Cookie „sso=true““ nicht angegeben ist, wird der Benutzer von StorageGRID abgemeldet, ohne dass der SSO-Status beeinträchtigt wird.
curl -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \ -H "accept: application/json" \ -H "Authorization: Bearer $MYTOKEN" \ --include
A
204 No Content
Die Antwort zeigt an, dass der Benutzer jetzt abgemeldet ist.HTTP/1.1 204 No Content