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
Instale o Shibboleth, o Tomcat e um servidor Lightweight Directory Access Protocol (LDAP).
-
Configure o servidor LDAP.
Neste exemplo, adicione uma conta de administrador ao LDAP com o distinguished name (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 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.
-
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 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
Faça logon no console RAM como administrador RAM.
No painel de navegação à esquerda, escolha .
Na aba Role-based SSO, clique em SAML e copie a URL de metadados do provedor de serviços SAML da Alibaba Cloud.
-
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.NotaAnote o valor do atributo
entityIDno elementoEntityDescriptor. 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
Reinicie o Tomcat para aplicar as alterações.
Acesse
https://<your server address>/idp/shibbolethe salve o arquivo de metadados na sua máquina local.
Etapa 4: Criar um provedor de identidade SAML
Faça logon no console RAM com sua conta Alibaba Cloud.
No painel de navegação à esquerda, escolha Integrations > SSO.
Na aba Role-based SSO, clique em SAML e, em seguida, clique em Create IdP.
Na página Create IdP, insira um IdP Name (shibboleth-provider) e uma Note.
Na seção Metadata File, clique em Upload Metadata File e carregue os metadados do IdP da Etapa 3: Obter metadados do IdP SAML.
Clique em Create IdP.
Anote o ARN do novo provedor de identidade para usar nas etapas posteriores.
Etapa 5: Criar uma função RAM
No painel de navegação à esquerda do console RAM, escolha .
Na página Roles, clique em Create Role.
No canto superior direito da página Create Role, clique em Switch to Policy Editor.
-
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.
No editor, defina a condição
saml:recipientcomohttps://signin.alibabacloud.com/saml-role/sso.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
-
Modifique o arquivo
/opt/shibboleth/conf/services.xml.O arquivo padrão
attribute-resolver.xmlnão possui as configurações necessárias. Substitua-o porattribute-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> -
Modifique o arquivo
/opt/shibboleth/conf/attribute-resolver-full.xml.-
Configure o Shibboleth para retornar os atributos de usuário
mailememberof.O
iddo atributomemberoférole, que representa a função do usuário. OReturnValueé<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 orole ARNna Etapa 5: Criar uma função RAM.NotaO nome da função é substituído por
$1para oferecer suporte a múltiplas funções. Altere a função de um usuário ajustando o campomemberofnas 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> -
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>
-
-
Adicione um filtro de atributos em
/opt/shibboleth/conf/attribute-filter.xml.Defina o
valuena tagPolicyRequirementRulecomo oentityIDda 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
-
Configure o NameID para a Alibaba Cloud em
/opt/shibboleth/conf/relying-party.xml.Defina o
relyingPartyIdsna tagbeancomo oentityIDda 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> -
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'} }" /> -
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.
-
Acesse
https://<your server address>/idp/profile/SAML2/Unsolicited/SSO?providerId=<entityID>.Na URL,
<entityID>corresponde aoentityIDda Alibaba Cloud obtido na Etapa 1: Obter metadados do provedor de serviços SAML. -
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.