Utiliser l'API si l'authentification unique est activée (Active Directory)
Si vous avez"configuré et activé l'authentification unique (SSO)" 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 Grid Management ou l'API Tenant Management.
Sign in à 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 .
-
Si vous souhaitez accéder à l’API de gestion des locataires, vous connaissez l’ID du compte locataire.
Pour obtenir un jeton d’authentification, vous pouvez utiliser l’un des exemples suivants :
-
Le
storagegrid-ssoauth.py
Script Python, situé dans le répertoire des fichiers d'installation de StorageGRID(./rpms
pour Red Hat Enterprise Linux,./debs
pour Ubuntu ou Debian, et./vsphere
pour VMware). -
Un exemple de flux de travail 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
.L'exemple de workflow curl ne protège pas le mot de passe contre toute visualisation par d'autres utilisateurs.
Si vous avez 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.py
Script Python. Passez à l’étape 2. -
Utilisez les requêtes curl. Passez à l’étape 3.
-
-
Si vous souhaitez utiliser le
storagegrid-ssoauth.py
script, transmettez le script à l'interpréteur Python et exécutez le script.Lorsque vous y êtes invité, saisissez des valeurs pour les arguments suivants :
-
La méthode SSO. Entrez ADFS ou adfs.
-
Le nom d'utilisateur SSO
-
Le domaine où StorageGRID est installé
-
L'adresse de StorageGRID
-
L'ID du compte locataire, si vous souhaitez accéder à l'API de gestion des locataires.
Le jeton d’autorisation StorageGRID est fourni dans la sortie. Vous pouvez désormais utiliser le jeton pour d’autres requêtes, de la même manière que vous utiliseriez l’API si SSO n’était pas utilisé.
-
-
Si vous souhaitez utiliser des requêtes curl, utilisez 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 grille, utilisez 0 comme TENANTACCOUNTID
. -
Pour recevoir une URL d’authentification signée, émettez une requête POST à
/api/v3/authorize-saml
et supprimez l’encodage JSON supplémentaire de la réponse.Cet exemple montre une requête POST pour une URL d'authentification signée pour
TENANTACCOUNTID
. Les résultats seront transmis àpython -m json.tool
pour 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.tool
La réponse pour cet exemple inclut une URL signée qui est codée en URL, mais elle n'inclut pas la couche de codage 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" }
-
Sauver le
SAMLRequest
à partir de la réponse à utiliser dans les commandes suivantes.export SAMLREQUEST='fZHLbsIwEEV%2FJTuv7...sSl%2BfQ33cvfwA%3D'
-
Obtenez une URL complète qui inclut l’ID de demande client d’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’ID de la demande 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’ID de demande du client à partir de la réponse.
export SAMLREQUESTID='00000000-0000-0000-ee02-0080000000de'
-
Envoyez vos informations d’identification à 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" --include
AD FS renvoie une redirection 302, avec des informations supplémentaires dans les en-têtes.
Si l'authentification multifacteur (MFA) est activée pour votre système SSO, le formulaire de publication 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
-
Sauver le
MSISAuth
cookie de la réponse.export MSISAuth='AAEAADAvsHpXk6ApV...pmP0aEiNtJvWY='
-
Envoyez une requête GET à l'emplacement spécifié avec les cookies du POST d'authentification.
curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID&client-request-id=$SAMLREQUESTID" \ --cookie "MSISAuth=$MSISAuth" --include
Les en-têtes de réponse contiendront des informations de session AD FS pour une utilisation ultérieure lors de la déconnexion, et le corps de la réponse contient la réponse SAML dans un champ de formulaire masqué.
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" />
-
Sauver le
SAMLResponse
du champ caché :export SAMLResponse='PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4='
-
Utilisation de la sauvegarde
SAMLResponse
, créer un StorageGRID/api/saml-response
demande de génération d'un jeton d'authentification StorageGRID .Pour
RelayState
, utilisez l'ID de compte locataire ou utilisez 0 si vous souhaitez vous connecter à l'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 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 sous
MYTOKEN
.export MYTOKEN="56eb07bf-21f6-40b7-af0b-5c6cacfb25e7"
Vous pouvez désormais utiliser
MYTOKEN
pour d'autres demandes, de la même manière que vous utiliseriez l'API si SSO n'était pas utilisé.
-
Déconnectez-vous de l'API si l'authentification unique est activée
Si l'authentification unique (SSO) a été activée, vous devez émettre une série de requêtes API pour vous déconnecter de l'API Grid Management ou de l'API Tenant Management. 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 en vous déconnectant de la page de déconnexion unique de votre organisation. Vous pouvez également déclencher une déconnexion unique (SLO) à partir de StorageGRID, ce qui nécessite un jeton porteur StorageGRID valide.
-
Pour générer une demande de déconnexion signée, transmettez `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.tool
Une 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 demande à l'URL de déconnexion pour déclencher SLO et rediriger vers StorageGRID.
curl --include "$LOGOUT_REQUEST"
La réponse 302 est renvoyée. L'emplacement de redirection ne s'applique pas à la déconnexion de 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 porteur StorageGRID fonctionne de la même manière que sans SSO. Si `cookie "sso=true" n'est pas fourni, l'utilisateur est déconnecté de StorageGRID sans affecter l'état SSO.
curl -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \ -H "accept: application/json" \ -H "Authorization: Bearer $MYTOKEN" \ --include
UN
204 No Content
la réponse indique que l'utilisateur est maintenant déconnecté.HTTP/1.1 204 No Content