Direkt zum Inhalt

Wie integriere und konfiguriere ich Amazon Cognito sicher mit externen SAML-Identitätsanbietern?

Lesedauer: 3 Minute
0

Ich möchte meinen Amazon Cognito-Benutzerpool so konfigurieren, dass er verschlüsselte SAML-Assertions von meinem externen SAML-Identitätsanbieter (IdP) verwendet. Ich möchte, dass die Benutzerauthentifizierung für meine Anwendung sicher ist.

Lösung

Deinem Benutzerpool einen SAML-IdP hinzufügen

Wenn du keinen Amazon Cognito-Benutzerpool hast, findest du weitere Informationen unter Erste Schritte mit Benutzerpools. Nachdem du deinen Benutzerpool erstellt hast, konfiguriere deine SAML-Anwendung auf der IdP-Seite. Informationen zum Hinzufügen eines SAML-IdP zu deinem Amazon Cognito-Benutzerpool findest du unter Hinzufügen und Verwalten von SAML-Identitätsanbietern in einem Benutzerpool.

Deinem SAML-IdP das Verschlüsselungszertifikat zur Verfügung stellen, um verschlüsselte SAML-Assertionen an Amazon Cognito zu senden

Lade zunächst das Verschlüsselungszertifikat von deiner Amazon Cognito-Konsole herunter. Importiere dann in der Konfigurationsoberfläche deines SAML-IdP das Verschlüsselungszertifikat. Anweisungen zum Importieren und Aktivieren des Verschlüsselungszertifikats findest du in der Dokumentation deines IdP. Weitere Informationen findest du beispielsweise unter Konfigurieren der Token-Verschlüsselung im Microsoft Entra Admin Center auf der Microsoft Learn-Website.

Verschlüsselten SAML-Assertionsfluss überprüfen

Führe die folgenden Schritte aus:

  1. Öffne die Entwickler-Tools deines Browsers und erstelle eine HTTP-Archivdatei (HAR).
  2. Navigiere zur verwalteten Anmeldeseite deines Amazon Cognito-Benutzerpools.
  3. Wähle SAML IdP aus. Amazon Cognito leitet dich zur Anmeldeseite des IdP weiter.
  4. Rufe in der HAR-Datei die SAML-Assertion-Anfrage ab, die dein IdP an den saml2/idpresponse-Endpunkt gesendet hat.
  5. Sieh dir in deinem Browser die SAML-Assertion-Antwort aus der HAR-Datei an.

Beispiel für eine dekodierte SAML-Antwort mit einer verschlüsselten SAML-Assertion:

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

Beispiel für eine dekodierte SAML-Antwort ohne Verschlüsselung:

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

Hinweis: Das Element saml:EncryptedAssertion in der Antwort bestätigt, dass du eine verschlüsselte SAML-Assertion hast. Nur dein IdP kann Assertion-Inhalte mit dem richtigen privaten Schlüssel entschlüsseln und lesen. Wenn saml:EncryptedAssertion nicht in der Antwort enthalten ist, hast du eine unverschlüsselte SAML-Assertion, die Benutzer- und Authentifizierungsdetails im Klartext anzeigt.

Ähnliche Informationen

SAML-Identitätsanbieter mit einem Benutzerpool verwenden

So richtest du Amazon Cognito für die Verbundauthentifizierung mit Azure AD ein

SAML-Assertionen für die Authentifizierungsantwort konfigurieren

AWS OFFICIALAktualisiert vor 3 Monaten