Authentication Challenge Trigger什么时候执行?

When Is Authentication Challenge Trigger executed?

作为我的用户池的 Auth Challenge,我定义了一个 Lambda 函数。此函数向 Authy 发送请求以请求一键式身份验证。

我想要此设置以将 Authy 多重身份验证添加到 Cognito 登录过程。

然而,当我进行身份验证时,使用用户名和密码登录 Cognito 用户,此 lambda 函数不会被触发!

我做错了什么? Lambda 触发器是否仅为注册过程定义?谢谢

--------------------更新:-------------------- --------------------------

我的登录代码,需要用户名和密码:

authenticate(userName, userPassword) {
    var userData = {Username: userName, Pool : CognitoUserPool}
    var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);

    var authenticationData = {Username : userName, Password : userPassword};
    var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);

    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function (session) {
            AWSInitialize(cognitoUser, session);
            face.showHome();
        }.bind(this),

        mfaRequired: function(session){
            new MFAConfirmation(cognitoUser, 'login');
        },

        onFailure: function(err) {
            alert(err);
        }
    });
};

触发器的定义位置:

Define Auth Challenge lambda 仅在 CUSTOM_AUTH 流的上下文中起作用,因此您必须在验证时将 CUSTOM_AUTH 作为 AuthFlow 传递。在 Javascript 你可以做:

    cognitoUser.setAuthenticationFlowType('CUSTOM_AUTH');

Cognito 使用 AWS Lambda 触发器开发人员指南中的示例实际上就是这样做的。他们允许您在使用用户名和密码进行身份验证后定义另一个质询。

Define Auth Challenge 示例可让您在使用用户名和密码进行身份验证后设置另一个质询。当您指定 CUSTOM_CHALLENGE 作为质询时,它会调用 Create Auth Challenge lambda 触发器。

    exports.handler = function(event, context) {
        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 = true;
            event.response.failAuthentication = false;
        } else {
            event.response.issueTokens = false;
            event.response.failAuthentication = true;
        }
        context.done(null, event);
    }