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
Instale o Shibboleth, o Tomcat e um servidor LDAP (Lightweight Directory Access Protocol).
-
Configure o servidor LDAP.
Para este exemplo, adicione uma conta de administrador ao LDAP com o DN
uid=admin,ou=systeme a senhasecret.Adicione uma conta de teste ao LDAP com o DN
cn=Test User,ou=users,dc=wimpi,dc=nete a senhasecret. A figura a seguir mostra os detalhes da conta.
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.
-
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)
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
Faça logon no console RAM como administrador do RAM.
No painel de navegação à esquerda, escolha .
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.
-
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.NotaAnote o valor do atributo
entityIDno elementoEntityDescriptor. 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
-
Modifique o arquivo
/opt/shibboleth/conf/services.xml.A configuração padrão usa
attribute-resolver.xml, que possui configurações limitadas. Substitua-o porattribute-resolver-full.xmlpara 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> -
Modifique o arquivo
/opt/shibboleth/conf/attribute-resolver-full.xml.-
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> -
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>
-
-
Modifique o arquivo
/opt/shibboleth/conf/attribute-filter.xmlpara adicionar um filtro de atributos.Substitua o atributo
valueno elementoPolicyRequirementRulepeloentityIDdo 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
-
Modifique o arquivo
/opt/shibboleth/conf/relying-party.xmlpara configurar o NameID para o Alibaba Cloud.Substitua o atributo
relyingPartyIdsno elementobeanpeloentityIDdo 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> -
Modifique o arquivo
/opt/shibboleth/conf/saml-nameid.xmlpara 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'} }" /> -
Modifique o arquivo
/opt/shibboleth/conf/saml-nameid.propertiespara 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
Reinicie o Tomcat para aplicar as configurações.
Acesse
https://<your-server-address>/idp/shibbolethe salve o arquivo de metadados no seu computador local.
Etapa 6: Ativar o SSO baseado em usuário no Alibaba Cloud
No painel de navegação à esquerda do console RAM, escolha .
-
Clique na aba User-based SSO. Na seção SSO Status, clique em Enabled.
NotaO 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.
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.
-
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
No painel de navegação à esquerda do console RAM, escolha .
Na página Users, clique em Create User.
-
Na página Create User, insira um Logon Name e um Display Name.
NotaCertifique-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.
Na seção Access Mode, selecione Console Access e defina a senha de logon e outros parâmetros.
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
Na página Overview do console RAM, copie a URL de logon do usuário RAM.
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.
Clique em Log on with an enterprise IdP account. Você será redirecionado para a página de logon do Shibboleth.
-
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
-
Acesse
https://<your-server-address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>.O
<entityID>na URL corresponde aoentityIDdo Alibaba Cloud obtido em Step 1: Get SAML SP metadata from Alibaba Cloud. -
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.