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.

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écuteront lorsque vous effectuez l'SRPauthentification dans un flux de défis 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.

Voici un exemple de InitiateAuth demande de démarrage qui précède l'authentification personnalisée par un SRP flux.

{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "1example23456789", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser", "SRP_A": "[SRP_A]", "SECRET_HASH": "[secret hash]" } }

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 MFA défis 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 in AdminInitiateAuthand InitiateAuthAPIoperations.

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 };