Passer au contenu

Comment intégrer et configurer Amazon Cognito avec des fournisseurs d'identité SAML externes en toute sécurité ?

Lecture de 3 minute(s)
0

Je souhaite configurer mon groupe d'utilisateurs Amazon Cognito pour utiliser des assertions SAML chiffrées provenant de mon fournisseur d'identité SAML (IdP) externe. Je souhaite que l'authentification de l'utilisateur pour mon application soit sécurisée.

Résolution

Ajouter un IdP SAML à votre groupe d'utilisateurs

Si vous ne disposez pas d’un groupe d'utilisateurs Amazon Cognito, consultez la section Commencer à utiliser les groupes d'utilisateurs. Après avoir créé votre groupe d'utilisateurs, configurez votre application SAML côté IdP. Pour ajouter un IdP SAML à votre groupe d'utilisateurs Amazon Cognito, consultez la section Ajout et gestion de fournisseurs d'identité SAML dans un groupe d'utilisateurs.

Fournir le certificat de chiffrement à votre IdP SAML pour envoyer des assertions SAML chiffrées à Amazon Cognito

Commencez par télécharger le certificat de chiffrement depuis votre console Amazon Cognito. Puis, dans l'interface de configuration de votre IdP SAML, importez le certificat de chiffrement. Reportez-vous à la documentation de votre IdP pour savoir comment importer et activer le certificat de chiffrement. Par exemple, consultez la page Configurer le chiffrement des jetons dans le centre d'administration Microsoft Entra sur le site Web de Microsoft Learn.

Vérifier le flux d'assertion SAML chiffré

Procédez comme suit :

  1. Ouvrez les outils de développement de votre navigateur et créez un fichier HTTP Archive (HAR).
  2. Accédez à la page de connexion gérée de votre groupe d'utilisateurs Amazon Cognito.
  3. Sélectionnez IdP SAML. Amazon Cognito vous redirige vers la page de connexion de l'IdP.
  4. Dans le fichier HAR, récupérez la demande d’assertion SAML que votre IdP a envoyée au point de terminaison saml2/idpresponse.
  5. Dans votre navigateur, consultez la réponse à l'assertion SAML depuis le fichier HAR.

Exemple de réponse SAML décodée avec une assertion SAML chiffrée :

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

Exemple de réponse SAML décodée sans chiffrement :

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

Remarque : L'élément saml:EncryptedAssertion de la réponse confirme que vous disposez d'une assertion SAML chiffrée. Seul votre IdP peut déchiffrer et lire le contenu des assertions avec la clé privée appropriée. Si saml:EncryptedAssertion ne figure pas dans la réponse, vous disposez d'une assertion SAML non chiffrée qui affiche les informations relatives à l'utilisateur et à l'authentification en texte clair.

Informations connexes

Utilisation de fournisseurs d’identité SAML avec un groupe d’utilisateurs

Comment configurer Amazon Cognito pour l'authentification fédérée à l'aide d'Azure AD

Configurer les assertions SAML pour la réponse d'authentification

AWS OFFICIELA mis à jour il y a 3 mois