AWS Cognito - 重置用户密码文档似乎自相矛盾

AWS Cognito - Resetting User Password Documentation Seems to Contradict Itself

问题

我同时使用过 AdminResetPassword 和 ForgotPassword,我在 API 文档中发现了一个令人困惑的矛盾,似乎表明目前没有完整的管理员初始化重置密码流程的解决方案。

AdminResetPassword documentation 说:

When a developer calls this API, the current password is invalidated, so it must be changed. If a user tries to sign in after the API is called, the app will get a PasswordResetRequiredException exception back and should direct the user down the flow to reset the password, which is the same as the forgot password flow.

但是 ForgotPassword documentation states that ConfirmForgotPassword is part of the forgot password flow, and the ConfirmForgotPassword documentation 要求将旧密码作为请求的一部分传递。密码字段描述为:

The password sent by a user's request to retrieve a forgotten password.

因此,文档声称 AdminResetPassword 和 ForgotPassword 使用相同的流程来重置密码,但实际上,ForgotPassword 允许恢复密码,而 AdminResetPassword 使当前密码无效。这一点之后的流程似乎不可能相同。

问题

这是文档中的错误还是我误解了 aws cognito 中重置密码的工作原理?

如果提到的两个流程不同,使用 AdminResetPassword 使密码失效后重置密码的完整流程是什么?

好吧,我不喜欢这样做,但我找到了答案。

文档确实有一些误导性的地方,如下所述,但不一定是明确的错误。

1.)同时调用ForgotPassword和AdminResetPassword后,用户密码失效。在 AdminResetPassword 的情况下,用户通过 email/sms 得到一个 "verification code",这实际上是 "confirmation code" 字段与 ConfirmForgotPassword API 方法。这是误导。

2.) 在 ConfirmForgotPassword API 调用中,文档将 "password" 字段描述为:

The password sent by a user's request to retrieve a forgotten password

但是这个字段实际上是用户要设置的新密码

3.) 文档没有注意到 "secret hash" 字段对于没有秘密集的客户端来说不是必需的。

因此,ConfirmForgotPassword 确实可以作为 AdminResetPassword 或 ForgotPassword 的后续调用,请牢记以上几点。

最新的文档说:

SecretHash A keyed-hash message authentication code (HMAC) calculated using the secret key of a user pool client and username plus the client ID in the message.

Type: String

Length Constraints: Minimum length of 1. Maximum length of 128.

Pattern: [\w+=/]+

Required: No

所以很明显不需要秘密哈希