Ir para o conteúdo

Como faço para integrar e configurar com segurança o Amazon Cognito com provedores de identidade SAML externos?

3 minuto de leitura
0

Quero configurar meu grupo de usuários do Amazon Cognito para usar declarações SAML criptografadas do meu provedor de identidades (IdP) SAML externo. Quero que a autenticação do usuário da minha aplicação seja segura.

Resolução

Adicionar um IdP SAML ao grupo de usuários

Se você não tiver um grupo de usuários do Amazon Cognito, consulte Getting started with user pools (Noções básicas de grupos de usuários). Depois de criar seu grupo de usuários, configure sua aplicação SAML no lado do IdP. Para adicionar um IdP SAML ao seu grupo de usuários do Amazon Cognito, consulte Adding and managing SAML identity providers in a user pool (Adicionar e gerenciar provedores de identidade SAML em um grupo de usuários).

Fornecer o certificado de criptografia ao IdP SAML para enviar declarações SAML criptografadas para o Amazon Cognito

Primeiro, baixe o certificado de criptografia do seu console do Amazon Cognito. Em seguida, na interface de configuração do seu IdP SAML, importe o certificado de criptografia. Consulte a documentação do seu IdP para obter instruções sobre como importar e ativar o certificado de criptografia. Por exemplo, consulte Configurar a criptografia de token SAML no Centro de administração do Microsoft Entra no site do Microsoft Learn.

Verificar o fluxo de declaração SAML criptografado

Conclua as etapas a seguir:

  1. Abra as ferramentas de desenvolvedor do seu navegador e crie um arquivo HTTP Archive (HAR).
  2. Navegue até a página de login gerenciado do seu grupo de usuários do Amazon Cognito.
  3. Selecione IdP SAML. O Amazon Cognito redireciona você para a página de login do IdP.
  4. No arquivo HAR, recupere a solicitação da declaração SAML que seu IdP enviou ao endpoint saml2/idpresponse.
  5. Em seu navegador, visualize a resposta de declaração SAML do arquivo HAR.

Exemplo de uma resposta SAML decodificada com uma declaração SAML criptografada:

<saml:EncryptedAssertion>
    <xenc:EncryptedData
        xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
        Type="http://www.w3.org/2001/04/xmlenc#Element">
        <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <xenc:EncryptedKey>
                <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"/>
                <xenc:CipherData>
                    <xenc:CipherValue>
                        <!-- Encrypted key data -->
                        hY7PK8L9eM+2Uw7....[abbreviated]....4nmB2gTfLwqX=
                    </xenc:CipherValue>
                </xenc:CipherData>
            </xenc:EncryptedKey>
        </ds:KeyInfo>
        <xenc:CipherData>
            <xenc:CipherValue>
                <!-- Encrypted assertion data -->
                kB4urcHh7K5HHJ....[abbreviated]....8JpWGpfTj=
            </xenc:CipherValue>
        </xenc:CipherData>
    </xenc:EncryptedData>
</saml:EncryptedAssertion>

Exemplo de uma resposta SAML decodificada sem criptografia:

<saml:Assertion
    ID="ASRT#########"
    Version="2.0"
    IssueInstant="2024-07-10T10:00:00Z">

    <saml:Issuer>https://idp.example.com/saml</saml:Issuer>

    <saml:Subject>
        <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">
            USER123456789
        </saml:NameID>
        <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
            <saml:SubjectConfirmationData
                NotOnOrAfter="2024-07-10T11:00:00Z"
                Recipient="https://app.example.com/saml/acs"/>
        </saml:SubjectConfirmation>
    </saml:Subject>

    <saml:Conditions
        NotBefore="2024-07-10T10:00:00Z"
        NotOnOrAfter="2024-07-10T11:00:00Z">
        <saml:AudienceRestriction>
            <saml:Audience>https://app.example.com/saml</saml:Audience>
        </saml:AudienceRestriction>
    </saml:Conditions>

    <saml:AuthnStatement
        AuthnInstant="2024-07-10T10:00:00Z"
        SessionNotOnOrAfter="2024-07-10T18:00:00Z"
        SessionIndex="SESSION123456789">
        <saml:AuthnContext>
            <saml:AuthnContextClassRef>
                urn:oasis:names:tc:SAML:2.0:ac:classes:Password
            </saml:AuthnContextClassRef>
        </saml:AuthnContext>
    </saml:AuthnStatement>

    <saml:AttributeStatement>
        <saml:Attribute Name="uid"
            NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
            <saml:AttributeValue>user123</saml:AttributeValue>
        </saml:Attribute>
        <saml:Attribute Name="email"
            NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
            <saml:AttributeValue>user@example.com</saml:AttributeValue>
        </saml:Attribute>
        <saml:Attribute Name="roles"
            NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
            <saml:AttributeValue>user</saml:AttributeValue>
            <saml:AttributeValue>admin</saml:AttributeValue>
        </saml:Attribute>
    </saml:AttributeStatement>
</saml:Assertion>

Observação: o elemento saml:EncryptedAssertion na resposta confirma que você tem uma declaração SAML criptografada. Somente seu IdP pode descriptografar e ler o conteúdo da declaração com a chave privada correta. Se saml:EncryptedAssertion não estiver na resposta, você terá uma declaração SAML não criptografada que mostra detalhes do usuário e da autenticação em texto não criptografado.

Informações relacionadas

Using SAML identity providers with a user pool (Como usar provedores de identidade SAML com um grupo de usuários)

Como configurar o Amazon Cognito para autenticação federada usando o Azure AD

Configurar declarações SAML para a resposta de autenticação

AWS OFICIALAtualizada há 3 meses