Skip to main content
Uma versão mais recente deste produto está disponível.
O português é fornecido por meio de tradução automática para sua conveniência. O inglês precede o português em caso de inconsistências.

Use a API do StorageGRID se o logon único estiver habilitado (Active Directory)

Se você tem "configurou e ativou o single sign-on (SSO)" e utiliza o Active Directory como provedor de SSO, é necessário emitir uma série de solicitações de API para obter um token de autenticação válido para a Grid Management API ou a Tenant Management API.

Faça login na API se o single sign-on estiver ativado

Estas instruções se aplicam se você estiver usando o Active Directory como provedor de identidade SSO.

Antes de começar
  • Você conhece o nome de usuário e a senha do SSO de um usuário federado que pertence a um grupo de usuários do StorageGRID.

  • Se você deseja acessar a API de Gerenciamento de Tenant, você sabe o ID da conta do tenant.

Sobre esta tarefa

Para obter um token de autenticação, você pode usar um dos seguintes exemplos:

  • O storagegrid-ssoauth.py`script Python, que está localizado no diretório de arquivos de instalação do StorageGRID (./rpms`para RHEL, `./debs`para Ubuntu ou Debian, e `./vsphere`para VMware).

  • Um exemplo de fluxo de trabalho com requisições curl.

    O fluxo de trabalho curl pode expirar se você o executar muito lentamente. Você poderá ver o erro: A valid SubjectConfirmation was not found on this Response.

    Observação O fluxo de trabalho curl de exemplo não protege a senha de ser vista por outros usuários.

Se você tiver um problema de codificação de URL, poderá ver o seguinte erro: Unsupported SAML version.

Passos
  1. Selecione um dos seguintes métodos para obter um token de autenticação:

    • Use o `storagegrid-ssoauth.py`script Python. Vá para o passo 2.

    • Use requisições curl. Vá para o passo 3.

  2. Se você quiser usar o `storagegrid-ssoauth.py`script, passe o script para o interpretador Python e execute o script.

    Quando solicitado, insira valores para os seguintes argumentos:

    • O método SSO. Digite ADFS ou adfs.

    • O nome de usuário SSO

    • O domínio onde StorageGRID está instalado

    • O endereço do StorageGRID

    • O ID da conta do locatário, caso você queira acessar a Tenant Management API.

      Script de autenticação SSO para AD FS

    O token de autorização do StorageGRID é fornecido na saída. Agora você pode usar o token para outras solicitações, de forma semelhante a como usaria a API se o SSO não estivesse sendo utilizado.

  3. Se você deseja usar solicitações curl, use o procedimento a seguir.

    1. Declare as variáveis necessárias para efetuar o login.

      export SAMLUSER='my-sso-username'
      export SAMLPASSWORD='my-password'
      export SAMLDOMAIN='my-domain'
      export TENANTACCOUNTID='12345'
      export STORAGEGRID_ADDRESS='storagegrid.example.com'
      export AD_FS_ADDRESS='adfs.example.com'
      Observação Para acessar a API de Gerenciamento de Grid, use 0 como TENANTACCOUNTID.
    2. Para receber uma URL de autenticação assinada, envie uma solicitação POST para /api/v3/authorize-saml e remova a codificação JSON adicional da resposta.

      Este exemplo mostra uma solicitação POST para uma URL de autenticação assinada para TENANTACCOUNTID. Os resultados serão passados para python -m json.tool para remover a codificação JSON.

      curl -X POST "https://$STORAGEGRID_ADDRESS/api/v3/authorize-saml" \
        -H "accept: application/json" -H  "Content-Type: application/json" \
        --data "{\"accountId\": \"$TENANTACCOUNTID\"}" | python -m json.tool

      A resposta para este exemplo inclui uma URL assinada que está codificada em URL, mas não inclui a camada adicional de codificação JSON.

      {
          "apiVersion": "3.0",
          "data": "https://adfs.example.com/adfs/ls/?SAMLRequest=fZHLbsIwEEV%2FJTuv7...sSl%2BfQ33cvfwA%3D&RelayState=12345",
          "responseTime": "2018-11-06T16:30:23.355Z",
          "status": "success"
      }
    3. Salve o SAMLRequest da resposta para uso em comandos subsequentes.

      export SAMLREQUEST='fZHLbsIwEEV%2FJTuv7...sSl%2BfQ33cvfwA%3D'
    4. Obtenha uma URL completa que inclua o ID da solicitação do cliente do AD FS.

      Uma opção é solicitar o formulário de login usando a URL da resposta anterior.

      curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID" | grep 'form method="post" id="loginForm"'

      A resposta inclui o ID da solicitação do cliente:

      <form method="post" id="loginForm" autocomplete="off" novalidate="novalidate" onKeyPress="if (event && event.keyCode == 13) Login.submitLoginRequest();" action="/adfs/ls/?
      SAMLRequest=fZHRToMwFIZfhb...UJikvo77sXPw%3D%3D&RelayState=12345&client-request-id=00000000-0000-0000-ee02-0080000000de" >
    5. Salve o ID da solicitação do cliente a partir da resposta.

      export SAMLREQUESTID='00000000-0000-0000-ee02-0080000000de'
    6. Envie suas credenciais para a ação do formulário da resposta anterior.

      curl -X POST "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID&client-request-id=$SAMLREQUESTID" \
      --data "UserName=$SAMLUSER@$SAMLDOMAIN&Password=$SAMLPASSWORD&AuthMethod=FormsAuthentication" --include

      O AD FS retorna um redirecionamento 302, com informações adicionais nos cabeçalhos.

      Observação Se a autenticação multifator (MFA) estiver habilitada para o seu sistema SSO, o formulário enviado também conterá a segunda senha ou outras credenciais.
      HTTP/1.1 302 Found
      Content-Length: 0
      Content-Type: text/html; charset=utf-8
      Location: https://adfs.example.com/adfs/ls/?SAMLRequest=fZHRToMwFIZfhb...UJikvo77sXPw%3D%3D&RelayState=12345&client-request-id=00000000-0000-0000-ee02-0080000000de
      Set-Cookie: MSISAuth=AAEAADAvsHpXk6ApV...pmP0aEiNtJvWY=; path=/adfs; HttpOnly; Secure
      Date: Tue, 06 Nov 2018 16:55:05 GMT
    7. Salve o `MSISAuth`cookie da resposta.

      export MSISAuth='AAEAADAvsHpXk6ApV...pmP0aEiNtJvWY='
    8. Envie uma solicitação GET para o local especificado com os cookies da autenticação POST.

      curl "https://$AD_FS_ADDRESS/adfs/ls/?SAMLRequest=$SAMLREQUEST&RelayState=$TENANTACCOUNTID&client-request-id=$SAMLREQUESTID" \
      --cookie "MSISAuth=$MSISAuth" --include

      Os cabeçalhos da resposta conterão informações da sessão do AD FS para uso posterior no logout, e o corpo da resposta conterá o SAMLResponse em um campo de formulário oculto.

      HTTP/1.1 200 OK
      Cache-Control: no-cache,no-store
      Pragma: no-cache
      Content-Length: 5665
      Content-Type: text/html; charset=utf-8
      Expires: -1
      Server: Microsoft-HTTPAPI/2.0
      P3P: ADFS doesn't have P3P policy, please contact your site's admin for more details
      Set-Cookie: SamlSession=a3dpbnRlcnMtUHJpbWFyeS1BZG1pbi0xNzgmRmFsc2Umcng4NnJDZmFKVXFxVWx3bkl1MnFuUSUzZCUzZCYmJiYmXzE3MjAyZTA5LThmMDgtNDRkZC04Yzg5LTQ3NDUxYzA3ZjkzYw==; path=/adfs; HttpOnly; Secure
      Set-Cookie: MSISAuthenticated=MTEvNy8yMDE4IDQ6MzI6NTkgUE0=; path=/adfs; HttpOnly; Secure
      Set-Cookie: MSISLoopDetectionCookie=MjAxOC0xMS0wNzoxNjozMjo1OVpcMQ==; path=/adfs; HttpOnly; Secure
      Date: Wed, 07 Nov 2018 16:32:59 GMT
      
      <form method="POST" name="hiddenform" action="https://storagegrid.example.com:443/api/saml-response">
        <input type="hidden" name="SAMLResponse" value="PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4=" /><input type="hidden" name="RelayState" value="12345" />
    9. Salve o SAMLResponse do campo oculto:

      export SAMLResponse='PHNhbWxwOlJlc3BvbnN...1scDpSZXNwb25zZT4='
    10. Utilizando o valor salvo SAMLResponse, faça uma solicitação StorageGRID/api/saml-response para gerar um token de autenticação do StorageGRID.

      Para RelayState, use o ID da conta do tenant ou use 0 se você quiser fazer login na Grid Management API.

      curl -X POST "https://$STORAGEGRID_ADDRESS:443/api/saml-response" \
        -H "accept: application/json" \
        --data-urlencode "SAMLResponse=$SAMLResponse" \
        --data-urlencode "RelayState=$TENANTACCOUNTID" \
        | python -m json.tool

      A resposta inclui o token de autenticação.

    {
        "apiVersion": "3.0",
        "data": "56eb07bf-21f6-40b7-af0b-5c6cacfb25e7",
        "responseTime": "2018-11-07T21:32:53.486Z",
        "status": "success"
    }
    1. Salve o token de autenticação na resposta como MYTOKEN.

      export MYTOKEN="56eb07bf-21f6-40b7-af0b-5c6cacfb25e7"

      Agora você pode usar MYTOKEN para outras solicitações, de forma semelhante a como usaria a API se o SSO não estivesse sendo utilizado.

Saia da API se o single sign-on estiver ativado

Se o login único (SSO) estiver habilitado, você deve emitir uma série de solicitações de API para sair da Grid Management API ou da Tenant Management API. Essas instruções se aplicam se você estiver usando Active Directory como provedor de identidade SSO

Sobre esta tarefa

Caso necessário, você pode sair da StorageGRID API fazendo logout na página de logout único da sua organização. Ou, você pode acionar o logout único (SLO) a partir do StorageGRID, o que requer um token de portador StorageGRID válido.

Passos
  1. Para gerar uma solicitação de logout assinada, passe o cookie sso=true para a API SLO:

    curl -k -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \
    -H "accept: application/json" \
    -H "Authorization: Bearer $MYTOKEN" \
    --cookie "sso=true" \
    | python -m json.tool

    Uma URL de logout é retornada:

    {
        "apiVersion": "3.0",
        "data": "https://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D",
        "responseTime": "2018-11-20T22:20:30.839Z",
        "status": "success"
    }
  2. Salve a URL de logout.

    export LOGOUT_REQUEST='https://adfs.example.com/adfs/ls/?SAMLRequest=fZDNboMwEIRfhZ...HcQ%3D%3D'
  3. Envie uma solicitação para o URL de logout para acionar o SLO e redirecionar de volta para StorageGRID.

    curl --include "$LOGOUT_REQUEST"

    A resposta 302 é retornada. O local de redirecionamento não se aplica ao logout somente via API.

    HTTP/1.1 302 Found
    Location: https://$STORAGEGRID_ADDRESS:443/api/saml-logout?SAMLResponse=fVLLasMwEPwVo7ss%...%23rsa-sha256
    Set-Cookie: MSISSignoutProtocol=U2FtbA==; expires=Tue, 20 Nov 2018 22:35:03 GMT; path=/adfs; HttpOnly; Secure
  4. Exclua o token de portador do StorageGRID.

    Excluir o token de portador do StorageGRID funciona da mesma forma que sem SSO. Se o cookie sso=true não for fornecido, o usuário será desconectado do StorageGRID sem afetar o estado do SSO.

    curl -X DELETE "https://$STORAGEGRID_ADDRESS/api/v3/authorize" \
    -H "accept: application/json" \
    -H "Authorization: Bearer $MYTOKEN" \
    --include

    Uma `204 No Content`resposta indica que o usuário agora está desconectado.

    HTTP/1.1 204 No Content