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

zzwlnbp8  于 2022-11-16  发布在  Shell
关注(0)|答案(4)|浏览(233)

我正在开发一个使用AWS服务后端的Web应用程序。我正在使用AWS Cognito来管理用户,但遇到了一个问题。当我创建一个新用户(使用临时密码)时,需要手动更改此密码以使其成为最终密码。我必须更改密码的唯一方法是使用AWS Cli,如下所述:
https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/change-password.html
我必须在shell中输入旧密码、新密码和访问令牌。问题是:我在哪里找到这个“访问令牌”?我不知道在shell中输入什么!AWS Cognito控制台没有帮助。

xuo3flqw

xuo3flqw1#

要更改用户密码:
使用此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
tct7dpnv

tct7dpnv2#

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"

更新日期:

在最初的答案之后,引入了一个新选项aws cognito-idp admin-set-user-password

py49o6xq

py49o6xq3#

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

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

您可以指定指定的密码是永久性的,这样您将使用户处于“已确认”状态。此API不需要旧密码是正确的,因为这样做不安全。管理员不需要知道用户密码。因此,API已命名为“AdminSetUserPassword”而不是“AdminChangeUserPassword”。

llmtgqce

llmtgqce4#

访问令牌通过用户登录来检索。您可以通过为用户运行aws cli命令aws cognito-idp admin-initiate-auth(找到here)来获取此令牌。
这将要求你有cognito池的根证书,我假设你有。命令将返回一个访问令牌,你可以使用一个小时(cognito令牌在1小时后到期,无论设置如何,看here)。

相关问题