Déclencheur Lambda de migration d'utilisateur - Amazon Cognito

Déclencheur Lambda de migration d'utilisateur

Quand un utilisateur n'existe pas dans le groupe d'utilisateurs au moment de la connexion avec un mot de passe, ou dans le flux de mot de passe oublié, Amazon Cognito appelle ce déclencheur. Lorsque la fonction Lambda renvoie une réponse positive, Amazon Cognito crée l'utilisateur dans le groupe d'utilisateurs. Pour en savoir plus sur le flux d'authentification avec le déclencheur Lambda de migration d'utilisateur, consultez Importation d'utilisateurs dans des groupes d'utilisateurs avec un déclencheur Lambda de migration d'utilisateur.

Pour migrer des utilisateurs de votre annuaire d'utilisateurs existant vers des groupes d'utilisateurs Amazon Cognito au moment de la connexion ou pendant le flux de mot de passe oublié, utilisez ce déclencheur Lambda.

Sources du déclencheur Lambda Migration d'utilisateur

Valeur triggerSource Événement déclencheur
UserMigration_Authentication Migration des utilisateurs lors de la connexion.
UserMigration_ForgotPassword Migration de l'utilisateur dans le cadre du flux de mot de passe oublié.

Paramètres du déclencheur Lambda Migration d'utilisateur

Il s'agit des paramètres qu'Amazon Cognito transmet à cette fonction Lambda avec les informations d'événements figurant dans les paramètres communs.

JSON
{ "userName": "string", "request": { "password": "string", "validationData": { "string": "string", . . . }, "clientMetadata": { "string": "string", . . . } }, "response": { "userAttributes": { "string": "string", . . . }, "finalUserStatus": "string", "messageAction": "string", "desiredDeliveryMediums": [ "string", . . .], "forceAliasCreation": boolean } }

Paramètres de demande de migration d'utilisateur

userName

Nom d'utilisateur que l'utilisateur saisit lors de la connexion.

mot de passe

Mot de passe que l'utilisateur saisit lors de la connexion. Amazon Cognito n'envoie pas cette valeur dans une demande initiée par un flux de mot de passe oublié.

validationData

Une ou plusieurs paires clé-valeur contenant les données de validation dans la demande de connexion de l'utilisateur. Pour transmettre ces données à votre fonction Lambda, vous pouvez utiliser le paramètre ClientMetadata dans les actions d'API InitiateAuth et AdminInitiateAuth.

clientMetadata

Une ou plusieurs paires clé-valeur que vous pouvez fournir en tant qu'entrée personnalisée à la fonction Lambda pour le déclencheur de migration d'utilisateur. Pour transmettre ces données à votre fonction Lambda, vous pouvez utiliser le paramètre ClientMetadata dans les actions d'API AdminRespondToAuthChallenge et ForgotPassword.

Paramètres de réponse de migration d'utilisateur

userAttributes

Ce champ est obligatoire.

Ce champ doit contenir une ou plusieurs paires nom-valeur qu'Amazon Cognito stocke dans le profil utilisateur dans votre groupe d'utilisateurs et utilise comme attributs utilisateur. Vous pouvez inclure les attributs utilisateur standard et personnalisés. Les attributs personnalisés ont besoin du préfixe custom: pour se distinguer des attributs standard. Pour plus d'informations, consultez Attributs personnalisés.

Note

Pour réinitialiser son mot de passe dans le flux de mot de passe oublié, un utilisateur doit avoir une adresse e-mail vérifiée ou un numéro de téléphone vérifié. Amazon Cognito envoie un message contenant un code de réinitialisation de mot de passe à l'adresse e-mail ou au numéro de téléphone spécifiés dans les attributs utilisateur.

Attributes Exigence
Tous les attributs signalés comme obligatoires lorsque vous avez créé le groupe d'utilisateurs Si des attributs requis sont manquants au cours de la migration, Amazon Cognito utilise les valeurs par défaut.
username

Requis si vous avez configuré votre groupe d'utilisateurs avec des attributs d'alias en plus du nom d'utilisateur pour la connexion, et que l'utilisateur a entré une valeur d'alias valide comme nom d'utilisateur. Cette valeur d'alias peut être une adresse e-mail, un nom d'utilisateur préféré ou un numéro de téléphone.

Si la demande et le groupe d'utilisateurs répondent aux exigences relatives aux alias, la réponse de votre fonction doit attribuer le paramètre username qu'elle a reçu à un attribut d'alias. De plus, la réponse doit attribuer votre propre valeur à l'attribut username. Si votre groupe d'utilisateurs ne répond pas aux conditions requises pour mapper le paramètre username reçu sur un alias, le paramètre username figurant dans la réponse doit correspondre exactement à la demande ou être omis.

Note

username doit être unique dans le groupe d'utilisateurs.

finalUserStatus

Vous pouvez définir ce paramètre sur CONFIRMED pour confirmer automatiquement vos utilisateurs afin qu'ils puissent se connecter avec leurs mots de passe précédents. Lorsque vous définissez un utilisateur sur CONFIRMED, il n'a pas besoin de prendre des mesures supplémentaires avant de pouvoir se connecter. Si vous ne définissez pas cet attribut sur CONFIRMED, il est réglé sur RESET_REQUIRED.

Un paramètre finalUserStatus égal à RESET_REQUIRED signifie que l'utilisateur doit modifier son mot de passe immédiatement après la migration lors de la connexion, et que votre application cliente doit gérer l'exception PasswordResetRequiredException pendant le flux d'authentification.

Note

Amazon Cognito n'applique pas la politique de complexité de mot de passe que vous avez configurée pour le groupe d'utilisateurs lors de la migration à l'aide du déclencheur Lambda. Si le mot de passe ne répond pas à la politique de mot de passe que vous avez configurée, Amazon Cognito accepte toujours le mot de passe pour pouvoir continuer à migrer l'utilisateur. Pour appliquer la politique de sécurité du mot de passe et rejeter les mots de passe non conformes à celle-ci, validez la sécurité du mot de passe dans votre code. Ensuite, si le mot de passe n'est pas conforme à la politique, définissez finalUserStatus sur RESET_REQUIRED.

messageAction

Vous pouvez définir ce paramètre sur SUPPRESS pour refuser d'envoyer le message de bienvenue qu'Amazon Cognito envoie habituellement aux nouveaux utilisateurs. Si votre fonction ne renvoie pas ce paramètre, Amazon Cognito envoie le message de bienvenue.

desiredDeliveryMediums

Vous pouvez définir ce paramètre sur EMAIL pour envoyer le message de bienvenue par e-mail, ou sur SMS pour l'envoyer par SMS. Si votre fonction ne renvoie pas ce paramètre, Amazon Cognito envoie le message de bienvenue par SMS.

forceAliasCreation

Si vous définissez ce paramètre sur TRUE et que le numéro de téléphone ou l'adresse e-mail spécifiés dans le paramètre UserAttributes existe déjà en tant qu'alias pour un autre utilisateur, l'appel d'API migre l'alias de cet autre utilisateur vers l'utilisateur nouvellement créé. L'utilisateur précédent ne peut plus se connecter à l'aide de cet alias.

Si vous définissez ce paramètre sur FALSE et que l'alias existe, Amazon Cognito ne migre pas l'utilisateur et renvoie une erreur à l'application cliente.

Si vous ne renvoyez pas ce paramètre, Amazon Cognito suppose que sa valeur est « false ».

Exemple de migration de l'utilisateur : Migration d'un utilisateur avec un mot de passe existant

Cet exemple de fonction Lambda migre l'utilisateur avec un mot de passe existant et supprime le message de bienvenue d'Amazon Cognito.

Node.js
exports.handler = (event, context, callback) => { var user; if ( event.triggerSource == "UserMigration_Authentication" ) { // authenticate the user with your existing user directory service user = authenticateUser(event.userName, event.request.password); if ( user ) { event.response.userAttributes = { "email": user.emailAddress, "email_verified": "true" }; event.response.finalUserStatus = "CONFIRMED"; event.response.messageAction = "SUPPRESS"; context.succeed(event); } else { // Return error to Amazon Cognito callback("Bad password"); } } else if ( event.triggerSource == "UserMigration_ForgotPassword" ) { // Lookup the user in your existing user directory service user = lookupUser(event.userName); if ( user ) { event.response.userAttributes = { "email": user.emailAddress, // required to enable password-reset code to be sent to user "email_verified": "true" }; event.response.messageAction = "SUPPRESS"; context.succeed(event); } else { // Return error to Amazon Cognito callback("Bad password"); } } else { // Return error to Amazon Cognito callback("Bad triggerSource " + event.triggerSource); } };