Je souhaite créer un flux de travail d'authentification avec les API Amazon Cognito afin de transmettre les métadonnées du client aux déclencheurs AWS Lambda.
Résolution
Lorsque vous appelez l'API InitiateAuth avec le paramètre ClientMetadata pour initier l'authentification utilisateur dans Amazon Cognito, ClientMetadata est transmis uniquement aux déclencheurs Lambda suivants :
En comparaison, vous devez appeler l'API RespondToAuthChallenge pour inclure ClientMetadata dans ces déclencheurs Lambda :
Incluez le paramètre ClientMetadata dans l'appel d'API RespondToAuthChallenge pour répondre à l'un des défis d'authentification suivants :
- Authentification multifactorielle (MFA) par mot de passe unique à durée limitée (TOTP)
- Service de messages courts (SMS) pour la MFA
- Mot de passe à distance sécurisé de l'appareil (SRP)
- Défis liés à l'authentification personnalisée
En outre, le paramètre ClientMetadata améliore les flux de travail personnalisés pour les déclencheurs du groupe d'utilisateurs des fonctions Lambda.
Exemple d'appel d'API RespondToAuthChallenge avec le paramètre ClientMetadata
Dans cet exemple, un groupe d'utilisateurs Amazon Cognito est configuré avec un client d'application. Un déclencheur Lambda après authentification est associé au groupe d'utilisateurs.
La fonction Lambda nommée lambda_handler imprime l'événement qu'elle reçoit :
import json
def lambda_handler(event, context):
# TODO implement
print(event)
return event
**Important :**Utilisez la journalisation avec soin dans le système de production pour éviter de révéler des données sécurisées ou des secrets dans Amazon CloudWatch.
Un utilisateur de test est créé dans le groupe d'utilisateurs. Ensuite, le service de SMS pour la MFA est configuré.
L'exemple de demande d'appel à l'API InitiateAuth initie la connexion de l'utilisateur :
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=test,PASSWORD=Password@123 --client-id 1abcd2efgh34ij5klmnopq456r
Exemple de réponse à un appel d'API InitiateAuth :
{
"ChallengeName": "SMS_MFA",
"Session": "1AbcDEfgXXXXX",
"ChallengeParameters": {
"CODE_DELIVERY_DELIVERY_MEDIUM": "SMS",
"CODE_DELIVERY_DESTINATION": "+********1234",
"USER_ID_FOR_SRP": "test"
}
}
L'exemple de demande d'appel d'API RespondToAuthChallenge envoie le code de MFA et le paramètre ClientMetadata inclut toutes les informations supplémentaires à transmettre :
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'
Exemple de réponse à un appel d'API RespondToAuthChallenge :
{
"ChallengeParameters": {},
"AuthenticationResult": {
"AccessToken": "abXXXX",
"ExpiresIn": 3600,
"TokenType": "Bearer",
"RefreshToken": "abXX",
"IdToken": "abXXX"
}
}
Une fois qu'un utilisateur s'est authentifié et a reçu des jetons d'Amazon Cognito, le déclencheur Lambda de post-authentification est invoqué.
Vous trouverez les résultats du déclencheur Lambda après authentification dans le journal des événements de la console CloudWatch. Recherchez les détails du paramètre ClientMetadata dans le corps de l'événement.
Informations connexes
Déclenchement Lambda d'un défi d'authentification personnalisé
Personnalisation des flux de travail du groupe d'utilisateurs avec des déclencheurs Lambda