Wie integriere und konfiguriere ich Amazon Cognito sicher mit externen SAML-Identitätsanbietern?
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:
- Öffne die Entwickler-Tools deines Browsers und erstelle eine HTTP-Archivdatei (HAR).
- Navigiere zur verwalteten Anmeldeseite deines Amazon Cognito-Benutzerpools.
- Wähle SAML IdP aus. Amazon Cognito leitet dich zur Anmeldeseite des IdP weiter.
- Rufe in der HAR-Datei die SAML-Assertion-Anfrage ab, die dein IdP an den saml2/idpresponse-Endpunkt gesendet hat.
- 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
- Tags
- Amazon Cognito
- Sprache
- Deutsch
