Déclencheur Lambda Définition d'une stimulation d'authentification - Amazon Cognito

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déclencheur Lambda Définition d'une stimulation d'authentification

Le déclencheur de défi define auth est une fonction Lambda qui gère la séquence de défi dans un flux d'authentification personnalisé. Il déclare le succès ou l'échec de la séquence de défis et définit le défi suivant si la séquence n'est pas encore terminée.

Déclencheurs Lambda de stimulation
Define auth challenge

Amazon Cognito appelle ce déclencheur pour initier le flux d'authentification personnalisé.

La demande de ce déclencheur Lambda contient session. Le paramètre session est un tableau contenant toutes les demandes de vérification présentées à l'utilisateur dans le processus d'authentification en cours. La demande inclut également le résultat correspondant. Le tableau session stocke les détails des demandes de vérification (ChallengeResult) dans l'ordre chronologique. La demande de vérification session[0] représente la première demande de vérification que l'utilisateur reçoit.

Paramètres du déclencheur Lambda Définition d'une stimulation d'authentification

La demande qu’Amazon Cognito transmet à cette fonction Lambda est une combinaison des paramètres ci-dessous et des paramètres courants qu’Amazon Cognito ajoute à toutes les demandes.

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "challengeName": "string", "issueTokens": boolean, "failAuthentication": boolean } }

Paramètres de demande de définition de la stimulation d'authentification

Quand Amazon Cognito appelle votre fonction Lambda, Amazon Cognito fournit les paramètres suivants :

userAttributes

Une ou plusieurs paires nom-valeur représentant les attributs utilisateur.

userNotFound

Booléen renseigné par Amazon Cognito quand PreventUserExistenceErrors est défini sur ENABLED pour votre client de groupe d'utilisateurs. Une valeur true signifie que l'ID utilisateur (nom d'utilisateur, adresse e-mail, etc.) ne correspond à aucun utilisateur existant. Quand PreventUserExistenceErrors a pour valeur ENABLED, le service n'informe pas l'application des utilisateurs inexistants. Nous vous recommandons de faire en sorte que vos fonctions Lambda conservent la même expérience utilisateur et tiennent compte de la latence. De cette façon, l'appelant ne peut pas détecter un comportement différent quand l'utilisateur existe ou n'existe pas.

séance

Tableau d'éléments ChallengeResult. Chacun contient les éléments suivants :

challengeName

L'un des types de défis suivants : CUSTOM_CHALLENGESRP_A,PASSWORD_VERIFIER,SMS_MFA,EMAIL_OTP,SOFTWARE_TOKEN_MFA,DEVICE_SRP_AUTH,DEVICE_PASSWORD_VERIFIER, ouADMIN_NO_SRP_AUTH.

Lorsque votre fonction de définition du défi d'authentification lance un PASSWORD_VERIFIER défi à un utilisateur qui a configuré l'authentification multifactorielle, Amazon Cognito lance ensuite SMS_MFA un défiEMAIL_OTP, ou. SOFTWARE_TOKEN_MFA Voici les instructions pour saisir un code d'authentification multifactoriel. Dans votre fonction, incluez la gestion des événements d'entrée provenant de SMS_MFAEMAIL_OTP, et des SOFTWARE_TOKEN_MFA défis. Vous n'avez pas besoin d'invoquer de défis MFA dans votre fonction de définition du défi d'authentification.

Important

Quand votre fonction détermine si un utilisateur s'est authentifié correctement et doit recevoir des jetons, vérifiez toujours challengeName dans votre fonction de définition de la stimulation d'authentification et s'il correspond à la valeur attendue.

challengeResult

Défini sur true si l'utilisateur a répondu à la demande de vérification avec succès, ou sur false dans le cas contraire.

challengeMetadata

Votre nom pour la demande de vérification personnalisée. Utilisé uniquement si challengeName est CUSTOM_CHALLENGE.

clientMetadata

Une ou plusieurs paires clé-valeur que vous pouvez fournir en tant qu'entrée personnalisée à la fonction Lambda que vous spécifiez pour le déclencheur Définition d'une stimulation d'authentification. Pour transmettre ces données à votre fonction Lambda, vous pouvez utiliser le ClientMetadata paramètre dans les opérations AdminRespondToAuthChallengeet RespondToAuthChallengeAPI. La demande qui invoque la fonction de défi define auth n'inclut pas les données transmises dans le ClientMetadata paramètre ni dans les opérations AdminInitiateAuthd'InitiateAuthAPI.

Paramètres de réponse de définition de la stimulation d'authentification

Dans la réponse, vous pouvez renvoyer l'étape suivante du processus d'authentification.

challengeName

Chaîne contenant le nom de la prochaine demande de vérification. Si vous souhaitez présenter une nouvelle demande de vérification pour votre utilisateur, spécifiez ici son nom.

issueTokens

Si vous déterminez que l'utilisateur a suffisamment répondu aux demandes de vérification d'authentification, définissez la valeur true. Si l'utilisateur n'a pas suffisamment répondu aux demandes de vérification, définissez la valeur false.

failAuthentication

Si vous souhaitez mettre fin au processus d'authentification actuel, définissez la valeur true. Pour poursuivre le processus d'authentification actuel, définissez la valeur false.

Exemple de définition de la stimulation d'authentification

Cet exemple définit une série de demandes de vérification d'authentification et émet des jetons seulement si l'utilisateur répond avec succès à toutes les demandes de vérification. Lorsque les utilisateurs terminent l'authentification SRP avec les PASSWORD_VERIFIER défis SRP_A and, cette fonction leur transmet un CUSTOM_CHALLENGE qui invoque le déclencheur du défi create auth. En combinaison avec notre exemple de défi de création d'authentification, cette séquence fournit un défi CAPTCHA pour le défi 3 et une question de sécurité pour le défi 4.

Une fois que l'utilisateur a résolu le CAPTCHA et répondu à la question de sécurité, cette fonction confirme que votre groupe d'utilisateurs peut émettre des jetons. L'authentification SRP n'est pas requise ; vous pouvez également définir le CAPTCHA et la question de sécurité comme défis 1 et 2. Dans le cas où votre fonction de définition du défi d'authentification ne déclare pas les défis SRP, le succès de vos utilisateurs est entièrement déterminé par leurs réponses à vos demandes personnalisées.

Node.js
const handler = async (event) => { if ( event.request.session.length === 1 && event.request.session[0].challengeName === "SRP_A" ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "PASSWORD_VERIFIER"; } else if ( event.request.session.length === 2 && event.request.session[1].challengeName === "PASSWORD_VERIFIER" && event.request.session[1].challengeResult === true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length === 3 && event.request.session[2].challengeName === "CUSTOM_CHALLENGE" && event.request.session[2].challengeResult === true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length === 4 && event.request.session[3].challengeName === "CUSTOM_CHALLENGE" && event.request.session[3].challengeResult === true ) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; } return event; }; export { handler };