Todos os produtos
Search
Central de documentação

Resource Access Management:Configure role-based SSO with Shibboleth

Última atualização: Jun 26, 2026

Este tópico descreve a configuração completa do single sign-on (SSO) baseado em funções do Shibboleth para a Alibaba Cloud, incluindo troca de metadados SAML, mapeamento de atributos e configuração do NameID.

Antes de começar

  1. Instale o Shibboleth, o Tomcat e um servidor Lightweight Directory Access Protocol (LDAP).

  2. Configure o servidor LDAP.

    Neste exemplo, adicione uma conta de administrador ao LDAP com o distinguished name (DN) uid=admin,ou=system e a senha secret.

    Adicione uma conta de teste ao LDAP com o DN cn=Test User,ou=users,dc=wimpi,dc=net e a senha secret. A figura a seguir mostra os detalhes da conta.

    image.png

    Os campos de informações do usuário são:

    • mail: mapeia para o nome de logon de um usuário RAM na Alibaba Cloud.

    • memberof: mapeia para um nome de função RAM na Alibaba Cloud.

    • samaccountname: nome de usuário usado para fazer logon no Shibboleth.

    • userpassword: senha de logon.

  3. Configure o Shibboleth para se conectar ao servidor LDAP.

    Modifique as seguintes configurações no arquivo /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)
Nota

As configurações do Shibboleth neste tópico servem apenas para demonstração e ilustram o processo completo de configuração de SSO com a Alibaba Cloud. A Alibaba Cloud não fornece serviços de consultoria para configuração do Shibboleth.

Etapa 1: Obter metadados do provedor de serviços SAML

  1. Faça logon no console RAM como administrador RAM.

  2. No painel de navegação à esquerda, escolha Integrations > SSO.

  3. Na aba Role-based SSO, clique em SAML e copie a URL de metadados do provedor de serviços SAML da Alibaba Cloud.

  4. Abra o link copiado em uma nova janela do navegador e salve o arquivo de metadados como /opt/shibboleth-idp/metadata/aliyun-ram-role-metadata.xml.

    Nota

    Anote o valor do atributo entityID no elemento EntityDescriptor. Esse valor é necessário para a configuração subsequente do Shibboleth.

Etapa 2: Registrar a Alibaba Cloud no Shibboleth

Em /opt/shibboleth-idp/conf/metadata-providers.xml, especifique o arquivo de metadados da Etapa 1: Obter metadados do provedor de serviços SAML para registrar a Alibaba Cloud no 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"/>

Etapa 3: Obter metadados do IdP SAML

  1. Reinicie o Tomcat para aplicar as alterações.

  2. Acesse https://<your server address>/idp/shibboleth e salve o arquivo de metadados na sua máquina local.

Etapa 4: Criar um provedor de identidade SAML

  1. Faça logon no console RAM com sua conta Alibaba Cloud.

  2. No painel de navegação à esquerda, escolha Integrations > SSO.

  3. Na aba Role-based SSO, clique em SAML e, em seguida, clique em Create IdP.

  4. Na página Create IdP, insira um IdP Name (shibboleth-provider) e uma Note.

  5. Na seção Metadata File, clique em Upload Metadata File e carregue os metadados do IdP da Etapa 3: Obter metadados do IdP SAML.

  6. Clique em Create IdP.

Anote o ARN do novo provedor de identidade para usar nas etapas posteriores.

Etapa 5: Criar uma função RAM

  1. No painel de navegação à esquerda do console RAM, escolha Identities > Roles.

  2. Na página Roles, clique em Create Role.

  3. No canto superior direito da página Create Role, clique em Switch to Policy Editor.

  4. Especifique o provedor de identidade SAML no editor.

    No Visual Editor, defina o Principal como o provedor de identidade (shibboleth-provider) da Etapa 4: Criar um provedor de identidade SAML. Para IdP Type, selecione SAML.

  5. No editor, defina a condição saml:recipient como https://signin.alibabacloud.com/saml-role/sso.

  6. Na caixa de diálogo Create Role, insira um Role Name (worker) e clique em OK.

Anote o ARN da nova função RAM para usar nas etapas posteriores.

Etapa 6: Configurar atributos de usuário no Shibboleth

  1. Modifique o arquivo /opt/shibboleth/conf/services.xml.

    O arquivo padrão attribute-resolver.xml não possui as configurações necessárias. Substitua-o por attribute-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>
  2. Modifique o arquivo /opt/shibboleth/conf/attribute-resolver-full.xml.

    1. Configure o Shibboleth para retornar os atributos de usuário mail e memberof.

      O id do atributo memberof é role, que representa a função do usuário. O ReturnValue é <part of the role ARN without the role name (worker)>+'$1',<service provider ARN>. Obtenha o <service provider ARN> na Etapa 4: Criar um provedor de identidade SAML e o role ARN na Etapa 5: Criar uma função RAM.

      Nota

      O nome da função é substituído por $1 para oferecer suporte a múltiplas funções. Altere a função de um usuário ajustando o campo memberof nas informações do usuário.

      O memberof é um atributo personalizado. Você pode substituí-lo por qualquer atributo que indique a função do usuário.

      <!-- ========================================== -->
      <!--      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>
    2. Esta conexão LDAP lê suas configurações de /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>
  3. Adicione um filtro de atributos em /opt/shibboleth/conf/attribute-filter.xml.

    Defina o value na tag PolicyRequirementRule como o entityID da Alibaba Cloud obtido na Etapa 1: Obter metadados do provedor de serviços 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>

Etapa 7: Configurar o NameID

  1. Configure o NameID para a Alibaba Cloud em /opt/shibboleth/conf/relying-party.xml.

    Defina o relyingPartyIds na tag bean como o entityID da Alibaba Cloud obtido na Etapa 1: Obter metadados do provedor de serviços 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>
  2. Configure a geração do NameID em /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'} }" />
  3. Atualize as propriedades do NameID em /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

Etapa 8: Reiniciar o Tomcat

Reinicie o Tomcat para aplicar as alterações.

Testar o SSO baseado em funções

Teste a integração de SSO após concluir a configuração.

  1. Acesse https://<your server address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>.

    Na URL, <entityID> corresponde ao entityID da Alibaba Cloud obtido na Etapa 1: Obter metadados do provedor de serviços SAML.

  2. Na página de logon do Shibboleth, insira seu nome de usuário e senha e clique em Log On.

    O sistema executa o SSO e faz o logon no console da Alibaba Cloud com a função especificada (worker).

FAQ

Verifique o arquivo /opt/shibboleth-idp/logs/idp-process.log para obter detalhes sobre erros. Problemas comuns:

Falha no logon apesar das credenciais corretas

Verifique o arquivo /opt/shibboleth-idp/logs/idp-process.log. Se o erro estiver relacionado a ValidateUsernamePassword, verifique a configuração de conexão LDAP. Certifique-se de que as seções comentadas estejam corretamente habilitadas, sem espaços extras.

Logon sem resposta e erro unable to connect to the ldap****

Verifique as configurações de conexão LDAP nos arquivos ldap.properties e attribute-resolver-full.xml.

Erro de redirecionamento: The NameID is missing

Verifique o mapeamento do atributo mail na Etapa 6: Configurar atributos de usuário no Shibboleth e a configuração do NameID na Etapa 7: Configurar o NameID.

O acesso a https://<your server address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID> retorna um erro Unsupported Request****

Verifique se o entityID está correto. O entityID deve ser consistente entre o arquivo de metadados na pasta metadata, o arquivo attribute-filter.xml e o arquivo relying-party.xml.

Erro de redirecionamento: Cannot find SAML role attribute which is required

Na Etapa 6: Configurar atributos de usuário no Shibboleth, verifique o mapeamento do atributo memberof para role e o valor de ReturnValue.

Erro de redirecionamento: Cannot find SAML role session name attribute which is required

Na Etapa 6: Configurar atributos de usuário no Shibboleth, verifique se o name do atributo mail é https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName. Isso ocorre geralmente ao converter uma configuração de SSO baseada em usuário para SSO baseado em funções sem atualizar o valor de name.

Erro de redirecionamento: The response signature is invalid

Carregue novamente os metadados do Shibboleth na Alibaba Cloud.