Saltar al contenido

¿Cómo integro y configuro Amazon Cognito de forma segura con proveedores de identidades de SAML externos?

3 minutos de lectura
0

Quiero configurar mi grupo de usuarios de Amazon Cognito para usar aserciones SAML cifradas de mi proveedor de identidades (IdP) de SAML externo. Quiero que la autenticación de usuario de mi aplicación sea segura.

Resolución

Adición de un IdP de SAML a tu grupo de usuarios

Si no tienes un grupo de usuarios de Amazon Cognito, consulta Getting started with user pools (Introducción a los grupos de usuarios). Después de crear el grupo de usuarios, configura la aplicación SAML en el lado del IdP. Para añadir un IdP de SAML al grupo de usuarios de Amazon Cognito, consulta Adding and managing SAML identity providers in a user pool (Adición y administración de proveedores de identidades de SAML en un grupo de usuarios).

Proporcionar el certificado de cifrado al IdP de SAML para enviar aserciones SAML cifradas a Amazon Cognito

En primer lugar, descarga el certificado de cifrado de la consola de Amazon Cognito. A continuación, en la interfaz de configuración del IdP de SAML, importa el certificado de cifrado. Consulta la documentación del IdP para obtener instrucciones sobre cómo importar y activar el certificado de cifrado. Por ejemplo, consulta Configurar el cifrado de tokens en el Centro de administración de Microsoft Entra en el sitio web de Microsoft Learn.

Verificación del flujo de aserción SAML cifrado

Sigue estos pasos:

  1. Abre las herramientas de desarrollo del navegador y crea un archivo HTTP Archive (HAR).
  2. Navega hasta la página de inicio de sesión administrado del grupo de usuarios de Amazon Cognito.
  3. Selecciona IdP de SAML. Amazon Cognito te redirige a la página de inicio de sesión del IdP.
  4. En el archivo HAR, recupera la solicitud de aserción SAML que el IdP ha enviado al punto de enlace saml2/idpresponse.
  5. En el navegador, consulta la respuesta de la aserción SAML desde el archivo HAR.

Ejemplo de una respuesta SAML decodificada con una aserción SAML cifrada:

<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>

Ejemplo de una respuesta SAML decodificada sin cifrado:

<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>

Nota: El elemento saml:EncryptedAssertion de la respuesta confirma que tienes una aserción SAML cifrada. Solo el IdP puede descifrar y leer el contenido de las aserciones con la clave privada correcta. Si saml:EncryptedAssertion no aparece en la respuesta, significa que tienes una aserción SAML sin cifrar que muestra los detalles del usuario y de la autenticación en texto sin cifrar.

Información relacionada

Using SAML identity providers with a user pool (Uso de proveedores de identidades de SAML con un grupo de usuarios)

How to set up Amazon Cognito for federated authentication using Azure AD (Cómo configurar Amazon Cognito para la autenticación federada mediante Azure AD)

Configure aserciones SAML para la respuesta de autenticación

OFICIAL DE AWSActualizada hace 9 meses