Utilizzo dell'API se è attivato il single sign-on
Se per il sistema StorageGRID è stato attivato il Single Sign-on (SSO), non è possibile utilizzare le richieste API autenticate standard per accedere e disconnettersi dall'API di gestione griglia o dall'API di gestione tenant.
Accesso all'API se è attivato il Single Sign-on
Se è stato attivato il Single Sign-on (SSO), è necessario emettere una serie di richieste API per ottenere un token di autenticazione da ad FS valido per l'API Grid Management o l'API Tenant Management.
-
Si conoscono il nome utente e la password SSO di un utente federated appartenente a un gruppo di utenti StorageGRID.
-
Se si desidera accedere all'API di gestione tenant, si conosce l'ID account tenant.
Per ottenere un token di autenticazione, è possibile utilizzare uno dei seguenti esempi:
-
Il
storagegrid-ssoauth.py
Script Python, che si trova nella directory dei file di installazione di StorageGRID (./rpms
Per Red Hat Enterprise Linux o CentOS,./debs
Per Ubuntu o Debian, e../vsphere
Per VMware). -
Un esempio di workflow di richieste di curl.
Il flusso di lavoro di arricciatura potrebbe andare in timeout se viene eseguito troppo lentamente. Potrebbe essere visualizzato l'errore: Impossibile trovare una SubjectConfirmation valida in questa risposta.
L'esempio di workflow di curl non protegge la password da essere vista da altri utenti.
Se si verifica un problema di codifica URL, potrebbe essere visualizzato l'errore: Versione SAML non supportata.
-
Selezionare uno dei seguenti metodi per ottenere un token di autenticazione:
-
Utilizzare
storagegrid-ssoauth.py
Script Python. Passare alla fase 2. -
USA richieste di curl. Passare alla fase 3.
-
-
Se si desidera utilizzare
storagegrid-ssoauth.py
Passare lo script all'interprete Python ed eseguirlo.Quando richiesto, inserire i valori per i seguenti argomenti:
-
Il nome utente SSO
-
Il dominio in cui è installato StorageGRID
-
L'indirizzo per StorageGRID
-
Se si desidera accedere all'API di gestione tenant, inserire l'ID account tenant. +
Il token di autorizzazione StorageGRID viene fornito nell'output. È ora possibile utilizzare il token per altre richieste, in modo simile a come si utilizzerebbe l'API se SSO non fosse utilizzato.
-
-
Se si desidera utilizzare le richieste di arricciamento, attenersi alla seguente procedura.
-
Dichiarare le variabili necessarie per l'accesso.
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'
Per accedere all'API Grid Management, utilizzare 0 AS TENANTACCOUNTID
. -
Per ricevere un URL di autenticazione firmato, inviare una richiesta DI POST a. `/api/v3/authorize-saml`E rimuovere la codifica JSON aggiuntiva dalla risposta.
Questo esempio mostra una richiesta POST per un URL di autenticazione firmato per
TENANTACCOUNTID
. I risultati verranno passati a python -m json.tool per rimuovere la codifica 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
La risposta per questo esempio include un URL firmato con codifica URL, ma non include il layer di codifica JSON aggiuntivo.
{ "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" }
-
Salvare
SAMLRequest
dalla risposta per l'utilizzo nei comandi successivi.export SAMLREQUEST='fZHLbsIwEEV%2FJTuv7...sSl%2BfQ33cvfwA%3D'
-
Ottenere un URL completo che includa l'ID della richiesta del client da ad FS.
Un'opzione consiste nel richiedere il modulo di accesso utilizzando l'URL della risposta precedente.
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID" | grep 'form method="post" id="loginForm"'
La risposta include l'ID della richiesta del client:
<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" >
-
Salvare l'ID della richiesta del client dalla risposta.
export SAMLREQUESTID='00000000-0000-0000-ee02-0080000000de'
-
Inviare le credenziali all'azione del modulo della risposta precedente.
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 restituisce un reindirizzamento 302, con informazioni aggiuntive nelle intestazioni.
Se l'autenticazione a più fattori (MFA) è attivata per il sistema SSO, il post del modulo conterrà anche la seconda password o altre credenziali. 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
-
Salvare
MSISAuth
cookie dalla risposta.export MSISAuth='AAEAADAvsHpXk6ApV...pmP0aEiNtJvWY='
-
Inviare una richiesta GET alla posizione specificata con i cookie del POST di autenticazione.
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID&client-request-id=$SAMLREQUESTID" \ --cookie "MSISAuth=$MSISAuth" --include
Le intestazioni delle risposte conterranno le informazioni della sessione di ad FS per un utilizzo successivo della disconnessione e il corpo della risposta conterrà la risposta SAMLin un campo di forma nascosto.
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" />
-
Salvare
SAMLResponse
dal campo nascosto:export SAMLResponse='PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4='
-
Utilizzando il salvato
SAMLResponse
, Creare un StorageGRID/api/saml-response
Richiesta di generazione di un token di autenticazione StorageGRID.Per
RelayState
, Utilizzare l'ID account tenant o utilizzare 0 se si desidera accedere all'API Grid Management.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
La risposta include il token di autenticazione.
{ "apiVersion": "3.0", "data": "56eb07bf-21f6-40b7-af0b-5c6cacfb25e7", "responseTime": "2018-11-07T21:32:53.486Z", "status": "success" }
-
Salvare il token di autenticazione nella risposta con nome
MYTOKEN
.export MYTOKEN="56eb07bf-21f6-40b7-af0b-5c6cacfb25e7"
Ora puoi utilizzare
MYTOKEN
Per le altre richieste, in modo simile a come si utilizza l'API se SSO non viene utilizzato.
-
Disconnettersi dall'API se è attivato il Single Sign-on
Se è stato attivato il Single Sign-on (SSO), è necessario emettere una serie di richieste API per disconnettersi dall'API Grid Management o dall'API Tenant Management.
Se necessario, puoi disconnetterti dall'API StorageGRID semplicemente disconnettendoti dalla singola pagina di disconnessione della tua organizzazione. In alternativa, è possibile attivare il logout singolo (SLO) da StorageGRID, che richiede un token bearer StorageGRID valido.
-
Per generare una richiesta di disconnessione firmata, passare
cookie "sso=true"
All'API SLO: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
Viene restituito un URL di disconnessione:
{ "apiVersion": "3.0", "data": "https://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D", "responseTime": "2018-11-20T22:20:30.839Z", "status": "success" }
-
Salvare l'URL di disconnessione.
export LOGOUT_REQUEST='https://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D'
-
Inviare una richiesta all'URL di disconnessione per attivare SLO e reindirizzare a StorageGRID.
curl --include "$LOGOUT_REQUEST"
Viene restituita la risposta 302. La posizione di reindirizzamento non è applicabile alla disconnessione API-only.
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
-
Eliminare il token del bearer StorageGRID.
L'eliminazione del token portante StorageGRID funziona come senza SSO. Se
cookie "sso=true"
Non viene fornito, l'utente viene disconnesso da StorageGRID senza influire sullo stato SSO.curl -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \ -H "accept: application/json" \ -H "Authorization: Bearer $MYTOKEN" \ --include
R
204 No Content
la risposta indica che l'utente è ora disconnesso.HTTP/1.1 204 No Content