Wie übermittele ich ClientMetadata an Lambda-Trigger in Amazon Cognito?

Lesedauer: 2 Minute
0

Ich möchte einen Authentifizierungs-Workflow mit Amazon-Cognito-APIs erstellen, um Client-Metadaten an AWS-Lambda-Trigger zu übermitteln.

Lösung

Wenn Sie die API InitiateAuth mit dem Parameter ClientMetadata aufrufen, um die Benutzerauthentifizierung in Amazon Cognito zu initiieren, wird ClientMetadata nur an diese Lambda-Trigger übergeben:

Im Vergleich dazu müssen Sie die API RespondToAuthChallenge aufrufen, um ClientMetadata in diese Lambda-Trigger aufzunehmen:

Fügen Sie den Parameter ClientMetadata in den API-Aufruf RespondToAuthChallenge ein, um auf eine der folgenden Authentifizierungsherausforderungen zu antworten:

  • Multi-Faktor-Authentifizierung (MFA) mit zeitgesteuertem Einmalpasswort (TOTP)
  • Kurznachrichtendienst (SMS) für MFA
  • Sicheres Remote-Passwort (SRP) für Geräte
  • Herausforderungen bei der benutzerdefinierten Authentifizierung

Darüber hinaus verbessert der Parameter ClientMetadata benutzerdefinierte Workflows für Benutzerpool-Trigger von Lambda-Funktionen.

Beispiel für einen RespondToAuthChallenge-API-Aufruf mit dem Parameter „ClientMetadata“

In diesem Beispiel wird ein Amazon-Cognito-Benutzerpool mit einem App-Client konfiguriert. Ein Lambda-Trigger nach der Authentifizierung ist dem Benutzerpool zugeordnet.

Die Lambda-Funktion mit dem Namenlambda_handler druckt das empfangene Ereignis aus:

import json

def lambda_handler(event, context):
# TODO implement
print(event)
return event

Wichtig: Gehen Sie bei der Protokollierung im Produktionssystem vorsichtig vor, um zu vermeiden, dass sichere Daten oder Geheimnisse in Amazon CloudWatch preisgegeben werden.

Ein Testbenutzer wird im Benutzerpool erstellt. Anschließend wird SMS für MFA konfiguriert.

Die Beispielanforderung für den API-Aufruf InitiateAuth leitet die Benutzeranmeldung ein:

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=test,PASSWORD=Password@123 --client-id 1abcd2efgh34ij5klmnopq456r

Die Beispielantwort des API-Aufrufs InitiateAuth:

{
  "ChallengeName": "SMS_MFA",
  "Session": "1AbcDEfgXXXXX",
  "ChallengeParameters": {
    "CODE_DELIVERY_DELIVERY_MEDIUM": "SMS",
    "CODE_DELIVERY_DESTINATION": "+********1234",
    "USER_ID_FOR_SRP": "test"
  }
}

Die Beispielanforderung des API-Aufrufs RespondToAuthChallenge übermittelt den MFA-Code und der Parameter ClientMetadata enthält alle zusätzlichen Informationen, die übergeben werden sollen:

aws cognito-idp respond-to-auth-challenge --client-id 9zyxw8vuts76rq5ponmlkj432i --challenge-name SMS_MFA --session "9ZyxWVutXXXXX" --challenge-responses USERNAME=test,SMS_MFA_CODE=654321 --client-metadata KeyName1='string',KeyName2='string'

Die Beispielantwort auf den API-Aufruf RespondToAuthChallenge:

{
  "ChallengeParameters": {},
  "AuthenticationResult": {
    "AccessToken": "abXXXX",
    "ExpiresIn": 3600,
    "TokenType": "Bearer",
    "RefreshToken": "abXX",
    "IdToken": "abXXX"
  }
}

Nachdem sich ein Benutzer erfolgreich authentifiziert und Token von Amazon Cognito erhalten hat, wird der Lambda-Trigger nach der Authentifizierung aufgerufen.

Die Ergebnisse des Lambda-Triggers nach der Authentifizierung finden Sie in der CloudWatch-Konsole unter „Protokollereignisse“. Suchen Sie im Ereignistext nach den Angaben zum Parameter ClientMetadata.

Relevante Informationen

Lambda-Auslöser nach der Authentifizierung

Anpassen von Benutzerpool-Workflows mit Lambda-Auslösern

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren