在AWS Cognito中回答了NEW_PASSWORD_REQUIRED挑战后,继续执行自定义身份验证流程

时间:2019-01-23 12:21:46

标签: amazon-cognito

新用户由管理员创建。他们需要在首次登录时重置其初始密码。我们将Cognito应用程序客户端配置为仅允许自定义身份验证流程(CUSTOM_AUTH_FLOW_ONLY)。但是,当用户重置密码时,身份验证流程结束,并且他们立即获得了id,access和refresh令牌,因此不会发出任何自定义挑战。

  • 如何引导流程继续进行自定义挑战流程,而不是发行令牌?
  • 如果令牌在重置其初始密码后仍未在响应中发送,也将起作用,因此用户必须重新登录。

新用户当前正在运行此流程:

  1. 此刻,对于新用户,我们发送的InitiateAuthRequest带有用户名和SRP_A,AuthFlow设置为CUSTOM_AUTH,就像普通登录一样。
  2. 我们的DefineAuthChallengeLambda被击中,发出了PASSWORD_VERIFIER挑战。
  3. 客户端使用srp声明,用户名和时间戳响应auth挑战。
  4. Cognito验证响应并发现用户必须更改其密码。跳过我们的Lambda触发器,Cognito返回NEW_PASSWORD_REQUIRED挑战。
  5. 客户端使用新密码响应auth挑战,Cognito接受密码并颁发令牌,这不是我们想要的。

我们要么希望流程在此处结束而不发出任何令牌,要么不希望在此处结束并继续进行define auth Challenge触发器调用。

1 个答案:

答案 0 :(得分:1)

所以我联系了AWS支持并获得了以下答案:

  

正如我提到的,我们一直在与团队合作,看来您已经发现使用Custom_Auth的问题以及使用Custom_Auth和Password_Verifier / New_Password_Required挑战的问题。似乎将Custom_auth更改为SRP_A或从SRP_A更改为“ Custom_auth”,并且此时无法使用“需要新密码”挑战。我们设法与Cognito服务团队完全复制了这一点,他们已经确认这有点问题,并且我们不支持使用Custom auth应对这些挑战。他们同意,但是我们应该在基础上给予支持,我们已经将其确定为团队的一项功能请求,并将其放在优先列表中。不幸的是,我不能给出一个明确的时间表来完全实施该程序。

TL; DR: 目前尚不完全支持带有密码验证的自定义身份验证流程。密码重置挑战打破了流程。

对于我们来说,我们使用一种解决方法:在PreTokenGeneration lambda触发器中,我们检查当前的身份验证流是否来自密码重置事件。如果是这种情况,我们只会引发异常,并且不会发出令牌。异常消息将返回给客户端,因此通过检查异常的消息内容,可以看到发生了什么确切的错误。如果您看到由于重置密码而未生成令牌,只需告诉用户:“密码成功重置”,然后将它们再次重定向到登录页面。他们可以从那里正常登录,完成整个自定义身份验证流程。

遗憾的是,当该功能可用时,无法提供反馈。显然,here宣布了大多数新功能,因此我会密切注意这一点。