Todos os produtos
Search
Central de documentação

Resource Access Management:Set up user-based SSO with Shibboleth

Última atualização: Jul 20, 2026

Este exemplo apresenta o processo completo de configuração do logon único (SSO) baseado em usuário entre o Shibboleth e o Alibaba Cloud.

Antes de começar

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

  2. Configure o servidor LDAP.

    Para este exemplo, adicione uma conta de administrador ao LDAP com o 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 no Alibaba Cloud.

    • memberof: Mapeia para um nome de função RAM no Alibaba Cloud.

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

    • userpassword: A 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 o Alibaba Cloud. O Alibaba Cloud não fornece serviços de consultoria para configuração do Shibboleth.

Etapa 1: Obter metadados do SP SAML do Alibaba Cloud

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

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

  3. Clique na aba User-based SSO. Na seção SAML Service Provider Metadata URL, copie a URL de metadados da sua conta do Alibaba Cloud.

  4. Abra a URL copiada em uma nova janela do navegador. Salve a página como um arquivo XML em /opt/shibboleth-idp/metadata/aliyun-ram-user-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 o Alibaba Cloud no Shibboleth

Configure o arquivo /opt/shibboleth-idp/conf/metadata-providers.xml para apontar para o arquivo de metadados de Step 1: Get SAML SP metadata from Alibaba Cloud. Isso registra o Alibaba Cloud como um provedor de service (SP) no Shibboleth.

<!--
    <MetadataProvider id="LocalMetadata"  xsi:type="FilesystemMetadataProvider" metadataFile="PATH_TO_YOUR_METADATA"/>
-->

<!-- Find the commented-out code block above and replace it with the following code. -->

<MetadataProvider id="AliyunMetadata"  xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/aliyun-ram-user-metadata.xml"/>

Etapa 3: Configurar atributos de usuário retornados pelo Shibboleth

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

    A configuração padrão usa attribute-resolver.xml, que possui configurações limitadas. Substitua-o por attribute-resolver-full.xml para obter a configuração completa.

    <value>%{idp.home}/conf/attribute-resolver.xml</value>
    <!-- Find the code above 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. Defina os atributos a serem retornados nas informações do usuário. Este exemplo retorna o atributo mail.

      <!-- ========================================== -->
      <!--      Attribute Definitions                 -->
      <!-- ========================================== -->
      
      <!-- Schema: Core schema attributes-->
      
      <!-- Find the commented-out code block above 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="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false" />
      </AttributeDefinition>
    2. No mesmo arquivo, configure a conexão LDAP usando as definiçõ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 example code block above 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. Modifique o arquivo /opt/shibboleth/conf/attribute-filter.xml para adicionar um filtro de atributos.

    Substitua o atributo value no elemento PolicyRequirementRule pelo entityID do Alibaba Cloud obtido em Step 1: Get SAML SP metadata from Alibaba Cloud.

    <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 code above and add the following code after it. -->
    	
    <AttributeFilterPolicy id="aliyun">
    	<PolicyRequirementRule xsi:type="Requester" value="[entityID]" />
    	<AttributeRule attributeID="mail">
    		<PermitValueRule xsi:type="ANY" />
    	</AttributeRule>
    </AttributeFilterPolicy>

Etapa 4: Configurar o NameID SAML

  1. Modifique o arquivo /opt/shibboleth/conf/relying-party.xml para configurar o NameID para o Alibaba Cloud.

    Substitua o atributo relyingPartyIds no elemento bean pelo entityID do Alibaba Cloud obtido em Step 1: Get SAML SP metadata from Alibaba Cloud.

    <!--
    	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 commented-out code block above 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. Modifique o arquivo /opt/shibboleth/conf/saml-nameid.xml para configurar como o NameID é gerado.

    <!-- Find the two code blocks below 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. Modifique o arquivo /opt/shibboleth/conf/saml-nameid.properties para configurar propriedades relacionadas ao NameID.

    idp.nameid.saml2.default = urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
    idp.persistentId.useUnfilteredAttributes = true
    idp.persistentId.encoding = BASE32

Etapa 5: Obter metadados do IdP SAML do Shibboleth

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

  2. Acesse https://<your-server-address>/idp/shibboleth e salve o arquivo de metadados no seu computador local.

Etapa 6: Ativar o SSO baseado em usuário no Alibaba Cloud

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

  2. Clique na aba User-based SSO. Na seção SSO Status, clique em Enabled.

    Nota

    O SSO baseado em usuário é um recurso global. Após ativá-lo, todos os usuários RAM devem fazer logon via SSO. Se você estiver configurando o SSO como um usuário RAM, mantenha esse recurso desativado até criar os usuários RAM necessários. Isso evita bloqueios devido a configurações incorretas. Como alternativa, use sua conta do Alibaba Cloud para configurar o SSO.

  3. Na seção Metadata File, clique em Upload Metadata File e envie o arquivo de metadados do IdP obtido em Step 5: Get the SAML IdP metadata from Shibboleth.

  4. Na seção Auxiliary Domain Name, clique em Edit, ative o nome de domínio auxiliar e defina-o como o sufixo do e-mail do usuário no Shibboleth.

    Neste exemplo, o valor é testdomain.alicloud.com.

Etapa 7: Criar um usuário RAM no Alibaba Cloud

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

  2. Na página Users, clique em Create User.

  3. Na página Create User, insira um Logon Name e um Display Name.

    Nota

    Certifique-se de que o prefixo do nome de logon do usuário RAM corresponda ao prefixo do e-mail do usuário no Shibboleth. Neste exemplo, o prefixo é testUser.

  4. Na seção Access Mode, selecione Console Access e defina a senha de logon e outros parâmetros.

  5. Clique em OK.

Verificar os resultados

Após concluir a configuração, inicie o logon SSO a partir do Alibaba Cloud ou do Shibboleth.

Iniciar SSO a partir do Alibaba Cloud

  1. Na página Overview do console RAM, copie a URL de logon do usuário RAM.

  2. Passe o mouse sobre sua foto de perfil no canto superior direito e clique em Log Out, ou abra a URL de logon do usuário RAM copiada em uma nova janela do navegador.

  3. Clique em Log on with an enterprise IdP account. Você será redirecionado para a página de logon do Shibboleth.

  4. Na página de logon do Shibboleth, insira o nome de usuário (testUser) e a senha e clique em Log On.

    O logon via SSO ocorre automaticamente e você é redirecionado para a página inicial do console do Alibaba Cloud.

Iniciar SSO a partir do Shibboleth

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

    O <entityID> na URL corresponde ao entityID do Alibaba Cloud obtido em Step 1: Get SAML SP metadata from Alibaba Cloud.

  2. Na página de logon do Shibboleth, insira o nome de usuário (testUser) e a senha e clique em Log On.

    O logon via SSO ocorre automaticamente e você é redirecionado para a página inicial do console do Alibaba Cloud.

FAQ

Se encontrar problemas durante a verificação, consulte /opt/shibboleth-idp/logs/idp-process.log para obter detalhes. Os problemas comuns incluem:

Erro de logon com credenciais corretas

Verifique a mensagem de erro em /opt/shibboleth-idp/logs/idp-process.log. Se o erro estiver relacionado a ValidateUsernamePassword, valide a configuração e a implantação da conexão LDAP. Certifique-se de que todo o código necessário esteja descomentado e sem espaços extras.

Nenhuma resposta após o logon, com o erro unable to connect to the ldap.

Valide as configurações de conexão LDAP em ldap.properties e attribute-resolver-full.xml.

Erro após redirecionamento para o Alibaba Cloud no logon: The NameID is missing.

Verifique se o campo mail está mapeado corretamente como atributo em Step 3: Configure user attributes returned by Shibboleth e se o NameID está configurado corretamente em Step 4: Configure the SAML NameID.

Ao acessarhttps://<your server address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>, aparece a mensagem Unsupported Request.

Confirme se o entityId está configurado corretamente. O entityId deve ser consistente nos metadados da pasta metadata, em attribute-filter.xml e em relying-party.xml.

Erro ao redirecionar para o Alibaba Cloud após o logon: The response signature is invalid.

Envie novamente o arquivo de metadados do Shibboleth no Alibaba Cloud.