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


            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.

Vous pouvez demander à Amazon Cognito de vérifier les mots de passe utilisateur avant d'émettre vos stimulations personnalisées. Tous les déclencheurs Lambda associés à la catégorie Authentification des quotas de taux de demande s'exécutent lorsque vous effectuez une authentification SRP dans un flux de stimulation personnalisé. Voici un aperçu du processus :

  1. Votre application initie la connexion en appelant InitiateAuth ou AdminInitiateAuth avec le mappage AuthParameters. Les paramètres doivent inclure CHALLENGE_NAME: SRP_A, et les valeurs pour SRP_A et USERNAME.

  2. Amazon Cognito appelle votre déclencheur Lambda Définition de la question de sécurité d'authentification avec une session initiale qui contient challengeName: SRP_A et challengeResult: true.

  3. Après réception de ces entrées, votre fonction Lambda répond avec challengeName: PASSWORD_VERIFIER, issueTokens: false, failAuthentication: false.

  4. Si la vérification du mot de passe réussit, Amazon Cognito appelle votre fonction Lambda à nouveau avec une nouvelle session contenant challengeName: PASSWORD_VERIFIER et challengeResult: true.

  5. Pour initier vos demandes de vérification personnalisées, votre fonction Lambda répond avec challengeName: CUSTOM_CHALLENGE, issueTokens: false et failAuthentication: false. Si vous ne souhaitez pas démarrer votre flux d'authentification personnalisé avec la vérification du mot de passe, vous pouvez initier une connexion avec le mappage AuthParameters en incluant CHALLENGE_NAME: CUSTOM_CHALLENGE.

  6. La boucle de stimulation se répète jusqu'à ce que toutes les réponses soient apportées à la stimulation.

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

Un des types de demande de vérification suivants : CUSTOM_CHALLENGE, SRP_A, PASSWORD_VERIFIER, SMS_MFA, DEVICE_SRP_AUTH, DEVICE_PASSWORD_VERIFIER ou ADMIN_NO_SRP_AUTH.

Lorsque votre fonction de définition de la stimulation d'authentification lance une stimulation PASSWORD_VERIFIER à un utilisateur qui a configuré l'authentification multifactorielle, Amazon Cognito lance ensuite une stimulation SMS_MFA. Dans votre fonction, incluez la gestion des événements d'entrée provenant des stimulations SMS_MFA. Vous n'avez pas besoin d'invoquer la stimulation SMS_MFA à partir de votre fonction de définition de la stimulation 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 paramètre ClientMetadata dans les opérations d'API AdminRespondToAuthChallenge et RespondToAuthChallenge. La demande qui appelle la fonction de définition d'une demande de vérification d'authentification n'inclut pas les données transmises dans le paramètre ClientMetadata dans les opérations d'API AdminInitiateAuth et InitiateAuth.

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.

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 }