我目前正在使用定义,创建和验证触发器来进行自定义身份验证流程。但是,在流程中不会检查用户密码。我们在客户上使用USER_PASSWORD_AUTH选项,因此没有SRP。
我看到了这个问题Can I use the migration trigger in a Custom auth flow,但并没有完全确定它是否回答了我的问题:
是否可以将自定义身份验证流与用户名密码(非SRP)流结合使用?如果是这样,我必须返回的挑战名称是什么?
Here可以组合使用,但在我看来PASSWORD_VERIFIER仅与SRP身份验证一起使用:
自定义身份验证流程还可以结合使用内置的挑战(例如SRP密码验证和通过SMS的MFA)以及自定义的挑战(例如CAPTCHA或机密问题)。
答案 0 :(得分:0)
因此,我设法将密码质询添加到自定义身份验证流中,方法是将它作为在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;
}
会话中未提出任何挑战,因为这应该是自定义身份验证流返回的第一个挑战,如here(“自定义身份验证流”一节)所述:
如果要在自定义身份验证流程中包括SRP,则需要从它开始。
但是,此刻,如果用户被迫更改密码,此后将跳过自定义身份验证流,这是一个错误,目前已由AWS确认。请参阅相关的帖子here。
示例here(“定义身份验证挑战示例”一节)被证明是错误的,因为在第一次点击定义身份验证挑战触发器的会话中没有任何挑战。