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

2 分钟阅读
0

我需要学习如何使用 AWS 命令行界面(AWS CLI)来帮助用户在 Amazon Cognito 中重置或更改密码。

解决方法

可以使用 AWS CLI 重置或更改 Amazon Cognito 密码。Amazon Cognito 管理员可以通过启动重置密码流程来重置用户密码。Amazon Cognito 用户可以自行更改密码,或者 Amazon Cognito 管理员可以临时或永久设置用户密码。

重置用户密码

要启动重置密码流程,管理员和用户需完成以下步骤:

1.    管理员调用 AdminResetUserPassword API。

**重要提示:在这些 AWS 命令行界面(AWS CLI)命令示例中,请将所有示例字符串的实例替换为您的值。(例如,将“example_user_pool_id”**替换为您的用户群体 ID。)

admin-reset-user-password 命令示例:

aws cognito-idp admin-reset-user-password --user-pool-id example_user_pool_id --username example_user_name

2.    当用户重置密码并尝试登录时,他们会收到 PasswordResetRequiredException 异常。然后,用户会被重定向到重置密码流程。

**注意:**重置密码流程与忘记密码流程相同。

3.    拥有经过验证的电子邮件地址或电话号码的用户会收到一条消息,其中包含重置密码所需的确认码。

使用未经验证的用户属性:

1.    如果用户没有经过验证的电子邮件地址或电话号码,管理员在调用 AdminResetUserPassword API 时会收到以下错误消息:

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

2.    为了解决此问题,管理员需调用 AdminUpdateUserAttributes API,并将 email_verifiedphone_number_verified 属性设置为 true

admin-update-user-attributes 命令示例:

aws cognito-idp admin-update-user-attributes --user-pool-id example_user_pool_id --username example_user_name --user-attributes Name="email_verified",Value="true"

3.    如果用户没有收到确认码,请按照最佳实践对问题进行故障排查

用户完成忘记密码流程:

1.    收到确认码后,用户可以通过调用 ConfirmForgotPassword API 来创建新密码。

confirm-forgot-password 命令示例:

aws cognito-idp confirm-forgot-password --client-id example_client_id --username example_user_name --confirmation-code example_code --password example_new password

更改用户密码

用户可以自行更改密码,管理员可以临时或永久设置用户密码。要更改用户密码,用户或管理员需执行以下步骤:

用户更改用户密码:

1.    用户调用 ChangePassword API。用户必须拥有由 Amazon Cognito 颁发的有效访问令牌才能调用 ChangePassword API。

change-password 命令示例:

aws cognito-idp change-password --previous-password example_old_password --proposed-password example_new_password --access-token valid_access_token

管理员创建永久性新用户密码:

1.    管理员调用 AdminSetUserPassword API 来创建新永久密码。

示例命令 admin-set-user-password 用于永久更改用户密码:

aws cognito-idp admin-set-user-password --user-pool-id example_user_pool_id --username example_user_name --password example_new_password --permanent

2.    管理员永久更改用户密码后,用户可以使用新密码登录应用程序。

管理员创建临时新用户密码:

1.    管理员调用 AdminSetUserPassword API 来创建新临时密码。

示例命令 admin-set-user-password 用于临时更改用户密码:

aws cognito-idp admin-set-user-password --user-pool-id example_user_pool_id --username example_user_name --password example_temporary_password --no-permanent

如果管理员将用户密码更改为临时密码,用户必须执行额外一些步骤。

2.    使用临时密码调用 AdminSetUserPassword API 后,用户的状态更改为“FORCE_CHANGE_PASSWORD”。尝试通过使用临时密码调用 InitiateAuth API 登录的用户会收到“NEW_PASSWORD_REQUIRED”身份验证质询。

initiate-auth 命令示例:

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=example_user_name,PASSWORD=example_temporary_password --client-id example_client_id

输出:

{
  "ChallengeName": "NEW_PASSWORD_REQUIRED",
  "Session": "AYA......",
  "ChallengeParameters": {
    "USER_ID_FOR_SRP": "544.....",
    "requiredAttributes": "[]",
    "userAttributes": "{\"email_verified\":\"true\",\"email\":\"user@example.com\"}"
  }
}

注意:会话令牌的有效性取决于您的应用程序客户端的身份验证流程会话持续时间设置。默认情况下,此会话令牌的会话持续时间为 3 分钟。要修改令牌的有效性,请参阅配置应用程序客户端身份验证流程会话持续时间的步骤。

3.    用户通过使用在上一步中收到的会话令牌调用 RespondToAuthChallenge API 来响应“NEW_PASSWORD_REQUIRED”质询。

respond-to-auth-challenge 命令示例:

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

4.    用户接收 ID、访问信息和刷新令牌并登录应用程序。

**重要信息:**如果您的应用程序客户端在用户群体中配置了客户端密钥,则必须提供密钥哈希。要了解更多信息,请参阅如何解决 Amazon Cognito 用户群体 API 中的“Unable to verify secret hash for client <client-id>”(无法验证客户端 <client-id> 的密钥哈希)错误?


AWS 官方
AWS 官方已更新 1 年前