跳至内容

如何使用 AWS CLI 在 Amazon Cognito 中重置用户密码?

2 分钟阅读
0

我想使用 AWS 命令行界面 (AWS CLI) 帮助用户在 Amazon Cognito 中重置或更改其密码。

解决方法

**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。在以下命令中,请将 VALID-ACCESS-TOKENUSER-POOL-IDCLIENT-IDUSERNAMECONFIRMATION-CODENEW-PASSWORD 以及 PREVIOUS-PASSWORD 替换为您的值。

以用户身份更改密码

**注意:要运行 change-password 命令,用户必须拥有已登录用户的访问令牌。访问令牌必须包含 ** aws.cognito.signin.user.admin 范围。

要以用户身份更改密码,请运行以下 change-password 命令:

aws cognito-idp change-password --previous-password PREVIOUS-PASSWORD --proposed-password NEW-PASSWORD --access-token VALID-ACCESS-TOKEN

以管理员身份重置用户密码

若管理员要重置用户密码,用户必须在用户池中拥有已验证的电子邮件或电话号码。当管理员运行 admin-reset-user-password 命令时,Amazon Cognito 会自动向用户已验证的联系方式发送确认码。

以管理员身份运行以下 admin-reset-user-password 命令来重置用户密码:

aws cognito-idp admin-reset-user-password --user-pool-id USER-POOL-ID --username USERNAME

**注意:**管理员重置密码后,用户尝试登录时会收到 "PasswordResetRequiredException" 错误。然后,Amazon Cognito 会将用户重定向到 forgot-password 流程。

管理员运行 admin-reset-user-password 命令后,用户需运行以下 confirm-forgot-password 命令来设置新密码:

aws cognito-idp confirm-forgot-password --client-id CLIENT-ID --username USERNAME --confirmation-code CONFIRMATION-CODE --password NEW-PASSWORD

如果用户没有已验证的电子邮件地址或电话号码,管理员会收到 "An error occurred (InvalidParameterException) when calling the AdminResetUserPassword operation: Cannot reset password for the user as there is no registered/verified email or phone_number" 错误。

要解决此问题,管理员需运行以下 admin-update-user-attributes 命令来验证用户的联系信息,并将 email_verifiedphone_number_verified 属性设置为 true

aws cognito-idp admin-update-user-attributes --user-pool-id USER-POOL-ID --username USERNAME --user-attributes Name="email_verified",Value="true"

管理员验证用户的联系信息后,可再次运行 admin-reset-user-password 命令。用户收到确认码后,可运行 confirm-forgot-password 命令来设置新密码。

如果用户仍未收到确认码,请参阅为什么 Amazon Cognito 不使用 ForgotPassword API 调用发送验证码电子邮件或短信?

以管理员身份设置永久密码或临时密码

要为用户设置永久密码,管理员需运行以下 admin-set-user-password 命令:

aws cognito-idp admin-set-user-password --user-pool-id USER-POOL-ID --username USERNAME --password NEW-PASSWORD --permanent

之后,用户即可使用新的永久密码登录。

要为用户设置临时密码,管理员需运行以下 dmin-set-user-password 命令:

aws cognito-idp admin-set-user-password --user-pool-id USER-POOL-ID --username USERNAME --password TEMPORARY-NEW-PASSWORD --no-permanent

管理员设置临时密码后,用户的状态会更改为 FORCE_CHANGE_PASSWORD。用户使用临时密码登录后,会收到 NEW_PASSWORD_REQUIRED 质询。

**注意:**完成密码质询的会话令牌有效期为 3 分钟。您可以在应用程序客户端的身份验证流程持续时间设置中修改持续时间

然后,用户运行以下 respond-to-auth-challenge 命令来设置新密码:

aws cognito-idp respond-to-auth-challenge --client-id CLIENT-ID --challenge-name NEW_PASSWORD_REQUIRED --challenge-responses USERNAME=example_username,NEW_PASSWORD="example_new_password" --session "example_session_token"

**重要事项:**如果您为应用程序客户端配置了客户端密钥,则用户必须在 respond-to-auth-challenge 命令中包含密钥哈希参数才能访问用户池。如果用户收到 "Unable to verify secret hash for client" 错误,请参阅如何对 Amazon Cognito 用户池 API 中的 "Unable to verify secret hash for client" 错误进行故障排除?

AWS 官方已更新 3 个月前