Suivez la procédure de configuration complète de l'authentification unique (SSO) basée sur les rôles depuis Shibboleth vers Alibaba Cloud, incluant l'échange de métadonnées SAML, le mappage des attributs et la configuration du NameID.
Avant de commencer
Installez Shibboleth, Tomcat et un serveur LDAP (Lightweight Directory Access Protocol).
-
Configurez le serveur LDAP.
Pour cet exemple, ajoutez un compte administrateur au LDAP avec le DN
uid=admin,ou=systemet le mot de passesecret.Ajoutez un compte de test au LDAP avec le DN
cn=Test User,ou=users,dc=wimpi,dc=netet le mot de passesecret. La figure suivante présente les détails du compte.
Les champs d'information utilisateur sont les suivants :
mail : Mappé au nom de connexion d'un utilisateur RAM dans Alibaba Cloud.
memberof : Mappé à un nom de rôle RAM dans Alibaba Cloud.
samaccountname : Nom d'utilisateur utilisé pour se connecter à Shibboleth.
userpassword : Mot de passe de connexion.
-
Configurez Shibboleth pour qu'il se connecte au serveur LDAP.
Modifiez les paramètres suivants dans le fichier
/opt/shibboleth-idp/conf/ldap.properties:# LDAP authentication mode idp.authn.LDAP.authenticator = bindSearchAuthenticator # LDAP server address idp.authn.LDAP.ldapURL = ldaps://[LDAP-server-address]:389 # Disable TLS and SSL idp.authn.LDAP.useStartTLS = false idp.authn.LDAP.useSSL = false # Base search directory idp.authn.LDAP.baseDN = dc=wimpi,dc=net idp.authn.LDAP.subtreeSearch = true # Logon matching rule. samaccountname is a field in the user data used for LDAP logon. idp.authn.LDAP.userFilter= (samaccountname={user}) # Admin account and password idp.authn.LDAP.bindDN = uid=admin,ou=system idp.authn.LDAP.bindDNCredential = secret idp.attribute.resolver.LDAP.searchFilter =(samaccountname=$resolutionContext.principal)
Les configurations Shibboleth présentées dans cette rubrique sont fournies à titre de démonstration et illustrent le processus complet de configuration du SSO avec Alibaba Cloud. Alibaba Cloud ne fournit pas de services de conseil pour la configuration de Shibboleth.
Étape 1 : Obtenir les métadonnées du fournisseur de service SAML
Connectez-vous à la console RAM en tant qu'administrateur RAM.
Dans le volet de navigation de gauche, choisissez .
Sous l'onglet Role-based SSO, cliquez sur l'onglet SAML et copiez l'URL des métadonnées du fournisseur de service SAML d'Alibaba Cloud.
-
Ouvrez le lien copié dans une nouvelle fenêtre de navigateur et enregistrez le fichier de métadonnées sous le nom
/opt/shibboleth-idp/metadata/aliyun-ram-role-metadata.xml.RemarqueNotez la valeur de l'attribut
entityIDde l'élémentEntityDescriptor. Vous aurez besoin de cette valeur pour la configuration ultérieure de Shibboleth.
Étape 2 : Enregistrer Alibaba Cloud auprès de Shibboleth
Dans /opt/shibboleth-idp/conf/metadata-providers.xml, spécifiez le fichier de métadonnées obtenu à l'Étape 1 : Obtenir les métadonnées du fournisseur de service SAML afin d'enregistrer Alibaba Cloud auprès de Shibboleth.
<!--
<MetadataProvider id="LocalMetadata" xsi:type="FilesystemMetadataProvider" metadataFile="PATH_TO_YOUR_METADATA"/>
-->
<!-- Find the preceding commented-out code and replace it with the following code. -->
<MetadataProvider id="AliyunMetadata" xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/aliyun-ram-role-metadata.xml"/>
Étape 3 : Obtenir les métadonnées du fournisseur d'identité SAML
Redémarrez Tomcat pour appliquer vos modifications.
Accédez à
https://<your server address>/idp/shibbolethet enregistrez le fichier de métadonnées sur votre machine locale.
Étape 4 : Créer un fournisseur d'identité SAML
Connectez-vous à la console RAM avec votre compte Alibaba Cloud.
Dans le volet de navigation de gauche, choisissez Integrations > SSO.
Sous l'onglet Role-based SSO, cliquez sur l'onglet SAML, puis sur Create IdP.
Sur la page Create IdP, saisissez un IdP Name (shibboleth-provider) et une Note.
Dans la section Metadata File, cliquez sur Upload Metadata File et téléchargez les métadonnées du fournisseur d'identité obtenues à l'Étape 3 : Obtenir les métadonnées du fournisseur d'identité SAML.
Cliquez sur Create IdP.
Notez l'ARN du nouveau fournisseur d'identité pour les étapes suivantes.
Étape 5 : Créer un rôle RAM
Dans le volet de navigation de gauche de la console RAM, choisissez .
Sur la page Roles, cliquez sur Create Role.
Dans le coin supérieur droit de la page Create Role, cliquez sur Switch to Policy Editor.
-
Spécifiez le fournisseur d'identité SAML dans l'éditeur.
Dans l'éditeur visuel, définissez le Principal sur le fournisseur d'identité (shibboleth-provider) créé à l'Étape 4 : Créer un fournisseur d'identité SAML. Pour le IdP Type, sélectionnez SAML.
Dans l'éditeur, définissez la condition
saml:recipientsurhttps://signin.alibabacloud.com/saml-role/sso.Dans la boîte de dialogue Create Role, saisissez un Role Name (worker) et cliquez sur OK.
Notez l'ARN du nouveau rôle RAM pour les étapes suivantes.
Étape 6 : Configurer les attributs utilisateur dans Shibboleth
-
Modifiez le fichier
/opt/shibboleth/conf/services.xml.Le fichier
attribute-resolver.xmlpar défaut ne contient pas les paramètres requis. Remplacez-le parattribute-resolver-full.xml.<value>%{idp.home}/conf/attribute-resolver.xml</value> <!-- Find the preceding code and replace it with the following code. --> <value>%{idp.home}/conf/attribute-resolver-full.xml</value> -
Modifiez le fichier
/opt/shibboleth/conf/attribute-resolver-full.xml.-
Configurez Shibboleth pour renvoyer les attributs utilisateur
mailetmemberof.L'
idde l'attributmemberofestrole, qui représente le rôle de l'utilisateur. La valeurReturnValueest<partie de l'ARN du rôle sans le nom du rôle (worker)>+'$1',<ARN du fournisseur de service>. Récupérez l'<ARN du fournisseur de service>à partir de l'Étape 4 : Créer un fournisseur d'identité SAML et l'ARN du rôleà partir de l'Étape 5 : Créer un rôle RAM.RemarqueLe nom du rôle est remplacé par
$1pour prendre en charge plusieurs rôles. Modifiez le rôle d'un utilisateur en ajustant le champmemberofdans les informations utilisateur.memberofest un attribut personnalisé. Vous pouvez le remplacer par n'importe quel attribut indiquant le rôle de l'utilisateur.<!-- ========================================== --> <!-- Attribute Definitions --> <!-- ========================================== --> <!-- Schema: Core schema attributes--> <!-- Find the preceding comment and add the following code after it. --> <AttributeDefinition xsi:type="Simple" id="mail"> <InputDataConnector ref="myLDAP" attributeNames="mail" /> <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:mail" encodeType="false" /> <AttributeEncoder xsi:type="SAML2String" name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName" friendlyName="mail" encodeType="false" /> </AttributeDefinition> <AttributeDefinition xsi:type="Mapped" id="role"> <InputDataConnector ref="myLDAP" attributeNames="memberof" /> <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:role" encodeType="false" /> <AttributeEncoder xsi:type="SAML2String" name="https://www.aliyun.com/SAML-Role/Attributes/Role" friendlyName="role" encodeType="false" /> <ValueMap> <ReturnValue>acs:ram::114*******71701:role/$1,acs:ram::114*******71701:saml-provider/shibboleth-provider</ReturnValue> <SourceValue>(.+)</SourceValue> </ValueMap> </AttributeDefinition> -
Cette connexion LDAP lit ses paramètres depuis
/opt/shibboleth/conf/ldap.properties.<!-- Example LDAP Connector --> <!-- <DataConnector id="myLDAP" xsi:type="LDAPDirectory" ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}" baseDN="%{idp.attribute.resolver.LDAP.baseDN}" principal="%{idp.attribute.resolver.LDAP.bindDN}" principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}" useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}" ...omitted... </DataConnector> --> <!-- Find the preceding example code and replace it with the following code. --> <DataConnector id="myLDAP" xsi:type="LDAPDirectory" ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}" baseDN="%{idp.attribute.resolver.LDAP.baseDN}" principal="%{idp.attribute.resolver.LDAP.bindDN}" principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}" useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS}" connectTimeout="%{idp.attribute.resolver.LDAP.connectTimeout}" responseTimeout="%{idp.attribute.resolver.LDAP.responseTimeout}"> <FilterTemplate> <![CDATA[ %{idp.attribute.resolver.LDAP.searchFilter} ]]> </FilterTemplate> </DataConnector>
-
-
Ajoutez un filtre d'attribut dans
/opt/shibboleth/conf/attribute-filter.xml.Définissez la
valuedans la balisePolicyRequirementRulesur l'entityIDd'Alibaba Cloud obtenu à l'Étape 1 : Obtenir les métadonnées du fournisseur de service SAML.<AttributeFilterPolicyGroup id="ShibbolethFilterPolicy" xmlns="urn:mace:shibboleth:2.0:afp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mace:shibboleth:2.0:afp http://shibboleth.net/schema/idp/shibboleth-afp.xsd"> <!-- Find the preceding code and add the following code after it. --> <AttributeFilterPolicy id="aliyun"> <PolicyRequirementRule xsi:type="Requester" value="[entityID]" /> <AttributeRule attributeID="mail"> <PermitValueRule xsi:type="ANY" /> </AttributeRule> <AttributeRule attributeID="role"> <PermitValueRule xsi:type="ANY" /> </AttributeRule> </AttributeFilterPolicy>
Étape 7 : Configurer le NameID
-
Configurez le NameID pour Alibaba Cloud dans
/opt/shibboleth/conf/relying-party.xml.Définissez les
relyingPartyIdsdans la balisebeansur l'entityIDd'Alibaba Cloud obtenu à l'Étape 1 : Obtenir les métadonnées du fournisseur de service SAML.<!-- Override example that identifies a single RP by name and configures it for SAML 2 SSO without encryption. This is a common "vendor" scenario. --> <!-- <bean parent="RelyingPartyByName" c:relyingPartyIds="https://sp.example.org"> <property name="profileConfigurations"> <list> <bean parent="SAML2.SSO" p:encryptAssertions="false" /> </list> </property> </bean> --> <!-- Find the preceding commented-out code and replace it with the following code. --> <bean parent="RelyingPartyByName" c:relyingPartyIds="[entityID]"> <property name="profileConfigurations"> <list> <bean parent="SAML2.SSO" p:encryptAssertions="false" p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" /> </list> </property> </bean> -
Configurez la génération du NameID dans
/opt/shibboleth/conf/saml-nameid.xml.<!-- Find the following two code blocks and uncomment them to apply the configuration. --> <bean parent="shibboleth.SAML2AttributeSourcedGenerator" p:omitQualifiers="true" p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" p:attributeSourceIds="#{ {'mail'} }" /> <bean parent="shibboleth.SAML1AttributeSourcedGenerator" p:omitQualifiers="true" p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" p:attributeSourceIds="#{ {'mail'} }" /> -
Mettez à jour les propriétés NameID dans
/opt/shibboleth/conf/saml-nameid.properties.idp.nameid.saml2.default = urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress idp.persistentId.useUnfilteredAttributes = true idp.persistentId.encoding = BASE32
Étape 8 : Redémarrer Tomcat
Redémarrez Tomcat pour appliquer vos modifications.
Tester le SSO basé sur les rôles
Testez l'intégration SSO après avoir terminé la configuration.
-
Accédez à
https://<your server address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>.Dans l'URL,
<entityID>correspond à l'entityIDd'Alibaba Cloud obtenu à l'Étape 1 : Obtenir les métadonnées du fournisseur de service SAML. -
Sur la page de connexion Shibboleth, saisissez votre nom d'utilisateur et votre mot de passe, puis cliquez sur Log On.
Le système effectue le SSO et vous connecte à la console Alibaba Cloud avec le rôle spécifié (worker).
FAQ
Consultez le fichier /opt/shibboleth-idp/logs/idp-process.log pour obtenir des détails sur les erreurs. Problèmes courants :
L'échec de la connexion malgré des identifiants corrects
Vérifiez le fichier /opt/shibboleth-idp/logs/idp-process.log. Si l'erreur concerne ValidateUsernamePassword, vérifiez la configuration de la connexion LDAP. Assurez-vous que les sections mises en commentaire sont correctement activées sans espaces supplémentaires.
Connexion inactive et erreur unable to connect to the ldap
Vérifiez les paramètres de connexion LDAP dans les fichiers ldap.properties et attribute-resolver-full.xml.
Erreur de redirection : The NameID is missing
Vérifiez le mappage de l'attribut mail à l'Étape 6 : Configurer les attributs utilisateur dans Shibboleth et la configuration du NameID à l'Étape 7 : Configurer le NameID.
L'accès à https://<your server address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID> renvoie une erreur Unsupported Request
Vérifiez que l'entityID est correcte. L'entityID doit être cohérente dans le fichier de métadonnées du dossier metadata, dans attribute-filter.xml et dans relying-party.xml.
Erreur de redirection : Cannot find SAML role attribute which is required
À l'Étape 6 : Configurer les attributs utilisateur dans Shibboleth, vérifiez le mappage de l'attribut memberof vers role et la valeur ReturnValue.
Erreur de redirection : Cannot find SAML role session name attribute which is required
À l'Étape 6 : Configurer les attributs utilisateur dans Shibboleth, vérifiez que le name de l'attribut mail est https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName. Cela se produit généralement lors de la conversion d'une configuration SSO basée sur les utilisateurs en SSO basé sur les rôles sans mettre à jour la valeur name.
Erreur de redirection : The response signature is invalid
Téléchargez à nouveau les métadonnées Shibboleth sur Alibaba Cloud.