AWS Cognito - 管理员重置用户密码且无需发送电子邮件

6
我需要重置一些用户的密码,但不发送忘记密码电子邮件。只需重置密码即可,在下次登录时显示一个消息,要求他们请求重置密码。最基本的需求是:在不通知用户的情况下,我需要将他们置于"RESET_REQUIRED"状态,以便在前端获取用户时返回"PasswordResetRequiredException"。
最初我认为"AdminSetUserPassword"可以胜任这个工作,但它会让用户处于需要通过某个我没有设置的UI更改密码的状态。我不确定是否有其他步骤可以采取--使用"AdminSetUserPassword"设置密码,然后可能采取其他步骤?
否则,我已经尝试了很多关于"AdminResetUserPassword"的不同方法。
- 尝试从触发器"CustomMessage_ForgotPassword"运行的Lambda中删除任何自定义消息,但这只会导致发送带有代码的通用消息。 - 尝试更改用户的"email_verified"属性为"false"(因为AWS文档指出,如果他们拥有验证过的电子邮件,它将发送重置密码电子邮件),但这会使密码重置本身产生错误。 - 尝试将用户的电子邮件更改为临时(虚假)电子邮件,以便将电子邮件发送到那里,但用户在更改电子邮件时会收到电子邮件。
有人有这方面的经验吗,或者这是一个不可能的要求?
1个回答

4
今天我遇到了这个问题,想让您知道我最终是如何解决的。
将用户设置为 RESET_REQUIRED 状态只有两种方法:
1. 使用 AdminResetUserPassword 2. 使用Cognito 导入作业 将用户导入(可以在此流程图中看到)
正如您所发现的那样,选项 1 将通过电子邮件或 SMS 发送代码,并且您不能轻松地阻止它。我向 AWS Support 提交了一个支持案例来询问此事,但他们也找不到任何解决方案。最后,我考虑使用自定义发送器触发器,以便在该触发器中决定是否发送电子邮件 / SMS,但设置外部电子邮件 / SMS 发送器非常麻烦,因此我决定不再麻烦。
在我们的情况下,我们正在从一个用户池迁移用户到另一个用户池,因此导入方法效果相当好。如果您只想在现有用户池中重置用户密码,则也可以使用导入方法:
1. 使用 AdminGetUser 读取用户属性,MFA 选项等。 2. 将此数据存储在安全的位置。 3. 使用 AdminDeleteUser 删除 Cognito 池中的用户。 4. 创建并运行 Cognito 导入作业以导入用户。
这将成功使您的用户处于 RESET_REQUIRED 状态,但缺点是:
- 用户的 sub 会更改 - 用户记住的设备将消失 - 用户的登录历史记录将消失 - 用户的 MFA 软件设备将消失
因此,这是一个相当糟糕的解决方案,但这是 Cognito 给我们使用的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接