SP-initiated
OpenStack e Shibboleth são soluções populares de código aberto para autenticação de identidade federada. Eles fornecem recursos avançados de SSO para conectar usuários a aplicações corporativas internas e externas. Esta seção descreve como usar o cliente ECP OpenStackClient e Shibboleth para obter um token de autenticação federado.
Fluxograma
A figura a seguir mostra o processo de autenticação de federação SP-initiated.
![](https://support.huaweicloud.com/intl/pt-br/api-iam/pt-br_image_0163397890.png)
Descrição
- O cliente chama a API usada para obter um token federado no modo SP-initiated.
- A plataforma em nuvem procura um arquivo de metadados com base nas informações do usuário e do IdP no URL e envia uma SAML request ao cliente.
- O cliente encapsula a SAML request e encaminha a solicitação para o IdP.
- Um usuário digita um nome de usuário e uma senha no servidor de IdP para autenticação de identidade.
- Depois de autenticar o usuário, o IdP constrói uma asserção contendo as informações de identidade do usuário e envia uma resposta SAML ao cliente.
- O cliente encapsula a resposta SAML e encaminha a resposta para a plataforma de nuvem.
- A plataforma em nuvem verifica e autentica a asserção e gera uma credencial de acesso temporária conforme as regras de conversão de identidade do usuário configuradas para o provedor de identidade.
- O usuário pode acessar recursos de nuvem pública com base nas permissões atribuídas.
OpenStackClient
O OpenStackClient é um cliente de linha de comando que pode ser instalado apenas por um usuário com permissões de raiz. A configuração deste cliente requer apenas permissões de usuário comuns.
![](https://support.huaweicloud.com/intl/pt-br/api-iam/public_sys-resources/notice_3.0-pt-br.png)
Chame APIs em um ambiente de rede seguro (em um servidor VPN ou em nuvem). Caso contrário, você pode encontrar ataques man-in-the-middle (MITM).
- Crie um arquivo de variável de ambiente no diretório de instalação do OpenStackClient e adicione o nome de usuário, a senha, a região, a versão do protocolo SAML e o endereço do IAM no arquivo. Tabela 1 descreve os parâmetros.
Por exemplo:
export OS_IDENTITY_API_VERSION=3
export OS_AUTH_TYPE=v3samlpassword
export OS_AUTH_URL=https://example:443/v3
export OS_IDENTITY_PROVIDER=idpid
export OS_PROTOCOL=saml
export OS_IDENTITY_PROVIDER_URL=https://idp.example.com/idp/profile/SAML2/SOAP/ECP
export OS_USERNAME=username
export OS_PASSWORD=userpassword
export OS_DOMAIN_NAME=example-domain-name
Tabela 1 Descrição do parâmetro Parâmetro
Descrição
OS_IDENTITY_API_VERSION
Versão da API de autenticação. O valor é fixado em 3.
OS_AUTH_TYPE
Tipo de autenticação. O valor é fixado em v3samlpassword.
OS_AUTH_URL
URL de autenticação. O formato do valor é https://IAM _address:Port_number/API_version.
- Port_number é fixado em 443.
- API_version é corrigido na v3.
OS_IDENTITY_PROVIDER
Nome de um provedor de identidade criado na plataforma de nuvem. Por exemplo: Publiccloud-Shibboleth.
OS_DOMAIN_NAME
Nome da conta a ser autenticada
OS_PROTOCOL
Versão do protocolo SAML. O valor é fixado em saml.
OS_IDENTITY_PROVIDER_URL
URL do provedor de identidade usado para lidar com as solicitações de autenticação iniciadas pelo ECP
OS_USERNAME
Nome de um usuário autenticado usando o provedor de identidade
OS_PASSWORD
Senha do usuário
- Execute o seguinte comando para definir variáveis de ambiente:
source keystonerc
- Execute o seguinte comando para obter um token:
openstack token issue
>>openstack token issue command: token issue -> openstackclient.identity.v3.token.IssueToken (auth=True) Using auth plugin: v3samlpassword +----------------------------------------------------------------------------------------------------------- | Field | Value | expires | 2018-04-16T03:46:51+0000 | id | MIIDbQYJKoZIhvcNAQcCoIIDXjXXX... | user_id | 9B7CJy5ME14f0fQKhb6HJVQdpXXX...
Na saída do comando, id é o token de autenticação federado obtido.
Cliente Shibboleth ECP
- Configure os arquivos metadata-providers.xml no Shibboleth IdP v3 e coloque-os no caminho correspondente.
<MetadataProvider id="LocalMetadata1"xsi:type="FilesystemMetadataProvider" metadataFile="C:\Program Files (x86)\Shibboleth\IdP\metadata\web_metadata.xml"/> <MetadataProvider id="LocalMetadata2"xsi:type="FilesystemMetadataProvider" metadataFile="C:\Program Files (x86)\Shibboleth\IdP\metadata\api_metadata.xml"/>
- MetadataProvider id indica o nome do arquivo de metadados baixado do sistema SP.
- metadataFile indica o caminho para armazenar o arquivo de metadados do sistema SP no sistema IdP.
- Configure o arquivo attribute-filter.xml no Shibboleth IdP v3.
<afp:AttributeFilterPolicy id="example1"> <afp:PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://auth.example.com/" /> <afp:AttributeRule attributeID="eduPersonPrincipalName"> <afp:PermitValueRule xsi:type="basic:ANY" /> </afp:AttributeRule> <afp:AttributeRule attributeID="uid"> <afp:PermitValueRule xsi:type="basic:ANY" /> </afp:AttributeRule> <afp:AttributeRule attributeID="mail"> <afp:PermitValueRule xsi:type="basic:ANY" /> </afp:AttributeRule> </afp:AttributeFilterPolicy> <afp:AttributeFilterPolicy id="example2"> <afp:PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://iam.{region_id}.example.com" /> <afp:AttributeRule attributeID="eduPersonPrincipalName"> <afp:PermitValueRule xsi:type="basic:ANY" /> </afp:AttributeRule> <afp:AttributeRule attributeID="uid"> <afp:PermitValueRule xsi:type="basic:ANY" /> </afp:AttributeRule> <afp:AttributeRule attributeID="mail"> <afp:PermitValueRule xsi:type="basic:ANY" /> </afp:AttributeRule> </afp:AttributeFilterPolicy>
AttributeFilterPolicy id indica o nome do arquivo de metadados baixado do sistema SP.
value indica o EntityID no arquivo de metadados do sistema SP.
- Configure o ponto final do sistema IdP no script ecp.py.
# mapping from user friendly names or tags to IdP ECP enpoints IDP_ENDPOINTS = { "idp1": "https://idp.example.com/idp/profile/SAML2/SOAP/ECP" }
- Execute o script ecp.py para obter um token de autenticação federado.
>>python ecp.py Usage: ecp.py [options] IdP_tag target_url login >>python ecp.py -d idp1 https://iam.{region_id}.example.com/v3/OS-FEDERATION/identity_providers/idp_example/protocols/saml/auth {username} X-Subject-Token: MIIDbQYJKoZIhvcNAQcCoIIDXXX...
X-Subject-Token é o token de autenticação federado obtido.