Utilisez l'API StorageGRID si l'authentification unique est activée (Active Directory)
Si vous avez "authentification unique (SSO) configurée et activée" et que vous utilisez Active Directory comme fournisseur SSO, vous devez émettre une série de requêtes API pour obtenir un jeton d'authentification valide pour l'API de gestion de la grille ou l'API de gestion des locataires.
Connectez-vous à l'API si l'authentification unique est activée
Ces instructions s'appliquent si vous utilisez Active Directory comme fournisseur d'identité SSO.
-
Vous connaissez le nom d'utilisateur et le mot de passe SSO d'un utilisateur fédéré qui appartient à un groupe d'utilisateurs StorageGRID.
-
Pour accéder à l'API de gestion des locataires, vous devez connaître l'identifiant du compte locataire.
Pour obtenir un jeton d'authentification, vous pouvez utiliser l'un des exemples suivants :
-
Le
storagegrid-ssoauth.pyscript Python, qui se trouve dans le répertoire des fichiers d'installation de StorageGRID (./rpmspour RHEL,./debspour Ubuntu ou Debian, et./vspherepour VMware). -
Un exemple de workflow de requêtes curl.
Le flux de travail curl peut expirer si vous l'exécutez trop lentement. Vous pourriez voir l'erreur :
A valid SubjectConfirmation was not found on this Response.Le flux de travail curl présenté en exemple ne protège pas le mot de passe contre la consultation par d'autres utilisateurs.
Si vous rencontrez un problème d'encodage d'URL, vous pourriez voir l'erreur : Unsupported SAML version.
-
Sélectionnez l'une des méthodes suivantes pour obtenir un jeton d'authentification :
-
Utilisez le
storagegrid-ssoauth.pyscript Python. Passez à l’étape 2. -
Utilisez les requêtes curl. Passez à l'étape 3.
-
-
Si vous souhaitez utiliser le
storagegrid-ssoauth.pyscript, transmettez le script à l’interpréteur Python et exécutez le script.Lorsque vous y êtes invité, saisissez les valeurs des arguments suivants :
-
La méthode SSO. Saisissez ADFS ou adfs.
-
Nom d'utilisateur SSO
-
Le domaine sur lequel StorageGRID est installé
-
L'adresse de StorageGRID
-
L'identifiant du compte locataire, si vous souhaitez accéder à l'API de gestion des locataires.

Le jeton d'autorisation StorageGRID est fourni dans le résultat. Vous pouvez désormais utiliser le jeton pour d'autres requêtes, comme vous le feriez avec l'API si l'authentification unique n'était pas utilisée.
-
-
Si vous souhaitez utiliser des requêtes curl, suivez la procédure suivante.
-
Déclarez les variables nécessaires à la connexion.
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'Pour accéder à l'API de gestion de la grille, utilisez 0 comme TENANTACCOUNTID. -
Pour recevoir une URL d'authentification signée, envoyez une requête POST à
/api/v3/authorize-saml, et supprimez l'encodage JSON supplémentaire de la réponse.Cet exemple illustre une requête POST pour une URL d'authentification signée pour
TENANTACCOUNTID. Les résultats seront transmis àpython -m json.toolpour supprimer l'encodage 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.toolLa réponse pour cet exemple inclut une URL signée et encodée en URL, mais elle n'inclut pas la couche d'encodage JSON supplémentaire.
{ "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" } -
Enregistrez le
SAMLRequestde la réponse pour l’utiliser dans les commandes suivantes.export SAMLREQUEST='fZHLbsIwEEV%2FJTuv7...sSl%2BfQ33cvfwA%3D' -
Obtenez une URL complète qui inclut l’ID de requête client depuis AD FS.
Une option consiste à demander le formulaire de connexion en utilisant l'URL de la réponse précédente.
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID" | grep 'form method="post" id="loginForm"'La réponse inclut l'identifiant de la requête du 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" >
-
Enregistrez l'identifiant de la requête client à partir de la réponse.
export SAMLREQUESTID='00000000-0000-0000-ee02-0080000000de' -
Envoyez vos identifiants à l'action du formulaire de la réponse précédente.
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 renvoie une redirection 302, avec des informations supplémentaires dans les en-têtes.
Si l'authentification multifactorielle (MFA) est activée pour votre système SSO, le formulaire envoyé contiendra également le deuxième mot de passe ou d'autres informations d'identification. 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
-
Enregistrez le
MSISAuthcookie issu de la réponse.export MSISAuth='AAEAADAvsHpXk6ApV...pmP0aEiNtJvWY=' -
Envoyez une requête GET à l'emplacement spécifié avec les cookies issus de la requête POST d'authentification.
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID&client-request-id=$SAMLREQUESTID" \ --cookie "MSISAuth=$MSISAuth" --includeLes en-têtes de réponse contiendront les informations de session AD FS pour une utilisation ultérieure lors de la déconnexion, et le corps de la réponse contient la SAMLResponse dans un champ de formulaire caché.
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" />
-
Enregistrez le
SAMLResponsedu champ caché :export SAMLResponse='PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4=' -
À l'aide des données enregistrées
SAMLResponse, effectuez une demande StorageGRID/api/saml-responsepour générer un jeton d'authentification StorageGRID.Pour
RelayState, utilisez l’ID du compte locataire ou 0 si vous souhaitez vous connecter à l’API de gestion de la grille.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.toolLa réponse inclut le jeton d'authentification.
{ "apiVersion": "3.0", "data": "56eb07bf-21f6-40b7-af0b-5c6cacfb25e7", "responseTime": "2018-11-07T21:32:53.486Z", "status": "success" }-
Enregistrez le jeton d'authentification dans la réponse en tant que
MYTOKEN.export MYTOKEN="56eb07bf-21f6-40b7-af0b-5c6cacfb25e7"Vous pouvez désormais utiliser
MYTOKENpour d'autres requêtes, de la même manière que vous utiliseriez l'API si l'authentification unique n'était pas utilisée.
-
Déconnectez-vous de l'API si l'authentification unique est activée
Si l'authentification unique (SSO) est activée, vous devez effectuer une série de requêtes API pour vous déconnecter de l'API de gestion de la grille ou de l'API de gestion des locataires. Ces instructions s'appliquent si vous utilisez Active Directory comme fournisseur d'identité SSO.
Si nécessaire, vous pouvez vous déconnecter de l'API StorageGRID depuis la page de déconnexion unique de votre organisation. Ou, vous pouvez déclencher une déconnexion unique (SLO) depuis StorageGRID, ce qui requiert un jeton d'authentification StorageGRID valide.
-
Pour générer une requête de déconnexion signée, transmettez le `cookie "sso=true" à l'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.toolUne URL de déconnexion est renvoyée :
{ "apiVersion": "3.0", "data": "https://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D", "responseTime": "2018-11-20T22:20:30.839Z", "status": "success" } -
Enregistrez l'URL de déconnexion.
export LOGOUT_REQUEST='https://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D' -
Envoyez une requête à l'URL de déconnexion pour déclencher le SLO et pour être redirigé vers StorageGRID.
curl --include "$LOGOUT_REQUEST"La réponse 302 est renvoyée. L'emplacement de redirection n'est pas applicable à la déconnexion via l'API uniquement.
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
-
Supprimez le jeton porteur StorageGRID.
La suppression du jeton d'accès StorageGRID fonctionne de la même manière qu'en l'absence d'authentification unique (SSO). Si le cookie « sso=true » n'est pas fourni, l'utilisateur est déconnecté de StorageGRID sans affecter l'état de l'authentification unique.
curl -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \ -H "accept: application/json" \ -H "Authorization: Bearer $MYTOKEN" \ --includeUne `204 No Content`réponse indique que l'utilisateur est maintenant déconnecté.
HTTP/1.1 204 No Content