Amazon web services AWS Cognito自定义身份验证流,带有用户\u密码\u身份验证

Amazon web services AWS Cognito自定义身份验证流,带有用户\u密码\u身份验证,amazon-web-services,amazon-cognito,Amazon Web Services,Amazon Cognito,我目前正在使用define、create和verify触发器处理自定义身份验证流。但是,在流程中不会检查用户密码。我们在客户机上使用USER\u PASSWORD\u AUTH选项,因此没有SRP 我看到这个问题,不太清楚它是否回答了我的问题: 是否可以将自定义身份验证流与用户名密码(非SRP)流结合使用?如果是,我必须返回的挑战名称是什么 声明可以使用组合,但在我看来,密码验证器仅适用于SRP认证: 自定义身份验证流还可以结合使用内置挑战,例如通过SMS进行SRP密码验证和MFA,以及自定义挑

我目前正在使用define、create和verify触发器处理自定义身份验证流。但是,在流程中不会检查用户密码。我们在客户机上使用USER\u PASSWORD\u AUTH选项,因此没有SRP

我看到这个问题,不太清楚它是否回答了我的问题:

是否可以将自定义身份验证流与用户名密码(非SRP)流结合使用?如果是,我必须返回的挑战名称是什么

声明可以使用组合,但在我看来,密码验证器仅适用于SRP认证:

自定义身份验证流还可以结合使用内置挑战,例如通过SMS进行SRP密码验证和MFA,以及自定义挑战,例如验证码或机密问题


因此,我设法将密码质询添加到自定义身份验证流中,将其作为DefineAuthChallenge lambda触发器中的第一个质询返回,如下所示:

// Add the password verifier to verify the password first.
if (input.Request?.Session == null || !input.Request.Session.Any(s => s.ChallengeName == "PASSWORD_VERIFIER"))
{
    input.Response.ChallengeName = AuthChallengeNames.AWS_PasswordVerifier;
    input.Response.FailAuthentication = false;
    input.Response.IssueTokens = false;

    return input;
}
会话中未给出任何质询,因为这应该是自定义身份验证流返回的第一个质询,如所述(“自定义身份验证流”部分):

如果希望在自定义身份验证流中包含SRP,则需要从它开始

但是,目前,如果用户被迫更改其密码,自定义身份验证流随后将被跳过,这在目前是一个bug,由AWS确认。见相关帖子


该示例(“定义身份验证质询示例”一节)被证明是明显错误的,因为在第一次触发定义身份验证质询触发器时,会话中没有质询。

除此之外,AWS Amplify在自定义身份验证的情况下使用SRP流,并且不允许使用用户名密码进行自定义身份验证是否有方法设置用户池,以便客户端可以使用用户名/密码或通过自定义质询登录?类似“允许两者”,并让客户端应用程序选择它使用哪一个。@Dave可能不会,因为密码需要由用户池检查作为第一个挑战。如果您自己实现密码检查(不推荐),您可以发送一个初始质询,询问使用哪种方式,然后返回密码质询或自定义身份验证质询。还没有机会在Android/iOs上尝试,但您可以调用initiateAuth并传递CUSTOM_AUTH,如果设置了触发器,它将允许您在不使用实际密码的情况下进行身份验证。周一我会找到一个更接近的片段…@Dave当然,如果你只想在不检查密码的情况下进行自定义身份验证挑战,你可以这样做。但是当第一个挑战不是密码挑战时,我没有找到用Cognito进行密码检查的方法。如果您找到了让第一个质询成为“您想使用密码还是SMS身份验证?”的方法,然后根据第一个质询的答案发送密码或SMS质询,则最好知道:-)