在 AWS Cognito 中回答 NEW_PASSWORD_REQUIRED 质询后继续自定义身份验证流程

Sve*_*ing 4 amazon-cognito

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

  • 我如何引导流程以继续我的自定义挑战流程,而不是发行令牌?
  • 如果令牌在重置初始密码后不会在响应中发送,它也会起作用,因此用户必须再次登录。

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

  1. 目前,对于新用户,我们发送InitiateAuthRequest用户名和 SRP_A,AuthFlow 设置为CUSTOM_AUTH,就像正常登录一样。
  2. 我们的 DefineAuthChallengeLambda 被击中,发出PASSWORD_VERIFIER挑战。
  3. 客户端使用 srp 声明、用户名和时间戳来响应身份验证质询。
  4. Cognito 验证响应并发现用户必须更改其密码。我们的 lambda 触发器被跳过,NEW_PASSWORD_REQUIRED挑战由 Cognito 返回。
  5. 客户端使用新密码响应身份验证质询,Cognito 接受密码并发出令牌,这不是我们想要的。

我们要么希望流程在这里结束而不发出任何令牌,要么不在这里结束并继续定义身份验证挑战触发器调用。

Sve*_*ing 5

所以我联系了 AWS Support 并得到了以下答复:

正如我提到的,我们一直在与团队合作,看起来您已经确定了使用 Custom_Auth 的问题以及使用 Custom_Auth 和 Password_Verifier/New_Password_Required 挑战的问题。看起来将 Custom_auth 更改为 SRP_A 或从 SRP_A 更改并使用需要新密码的质询此时不起作用。我们设法与 Cognito 服务团队完全复制了这一点,他们已经确认这有点坏,我们不支持自定义身份验证来应对这些挑战。他们同意,但是我们应该从根本上支持他们,我们已将此确定为团队的功能请求,他们已将其放在优先列表中。不幸的是,我无法给出完全实施的明确时间框架。

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

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

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

  • Cognito 确实有很多错误。我确实希望他们认真对待他们的路线图。 (2认同)