如何更改AWS Cognito用户的密码?

时间:2017-09-20 13:47:12

标签: shell amazon-web-services passwords aws-cognito

我正在开发一个使用AWS服务后端的Web应用程序。 我正在使用AWS Cognito来管理用户,但我遇到了问题。当我创建一个新用户(使用临时密码)时,我需要手动更改此密码以使其具有确定性。 我必须更改密码的唯一方法是使用AWS Cli,如下所述:

https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/change-password.html

我必须在shell中输入旧密码,新密码和访问令牌。问题是:我在哪里找到这个“访问令牌”?我不知道在shell中输入什么! AWS Cognito控制台无济于事。

4 个答案:

答案 0 :(得分:9)

aws cognito-idp change-password只能与能够登录的用户一起使用,因为您需要aws cognito-idp admin-initiate-auth中的访问令牌。

但是由于用户具有临时密码,因此尝试登录时它将面临NEW_PASSWORD_REQUIRED的挑战。

这是我的做法:

$ aws cognito-idp admin-create-user  --user-pool-id USERPOOLID  --username me@example.com --desired-delivery-mediums EMAIL --user-attributes Name=email,Value=me@example.com

$ aws cognito-idp initiate-auth --client-id CLIENTID --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=me@example.com.me,PASSWORD="tempPassword"

现在,您将面临NEW_PASSWORD_REQUIRED挑战和非常长的会话令牌。 用那个人来应对挑战:

$ aws cognito-idp admin-respond-to-auth-challenge --user-pool-id USERPOOLID --client-id CLIENTID   --challenge-responses "NEW_PASSWORD=LaLaLaLa1234!!!!,USERNAME=me@example.com" --challenge-name NEW_PASSWORD_REQUIRED --session "YourLongSessionToken"

答案 1 :(得分:3)

要更改用户密码:

有了这个aws cli:

$ aws --version
aws-cli/1.17.9 Python/3.6.10 Linux/5.3.0-26-generic botocore/1.14.9

您可以这样操作:

aws cognito-idp admin-set-user-password --user-pool-id "eu-west-11111"  --username "aaaaaa-aaaa-aaaa-aaaa" --password "a new password" --permanent

要了解更多信息:

 aws cognito-idp admin-set-user-password help

答案 2 :(得分:0)

正确的 API 是: https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html

语法是:

{
   "Password": "string",
   "Permanent": true,
   "Username": "string",
   "UserPoolId": "string"
}

您可以指定指定的密码是永久的,并且您的用户将处于 CONFIRMED 状态。 这个 API 不需要旧密码是正确的,因为它不安全。管理员不需要知道用户密码。所以 API 被命名为“AdminSetUserPassword”而不是“AdminChangeUserPassword”。

答案 3 :(得分:-1)

通过记录用户来检索访问令牌。您可以通过为用户运行aws cli命令aws cognito-idp admin-initiate-auth来获取此令牌(找到here)。

这将要求您拥有Cognito池的根凭据,我认为您拥有该凭据。该命令将返回您可以使用一小时的访问令牌(认知令牌在1小时后过期,无论设置如何,请查看here)。