AWS CLI - 如何为Cognito用户生成安全性令牌

问题描述 投票:1回答:2

最终,我需要为Cognito用户池中的用户生成AccessKeyId,SecirutyKey和SessionToken,以便我可以使用Postman将lambda函数作为cognito用户进行测试。到目前为止,我花了两天的时间试图解决这个问题。看起来这会起作用:

aws sts assume-role-with-web-identity --role-arn arn:aws:iam::1234567890:role/rolename--role-session-name "RoleSession1" --web-identity-token ??? --provider-id provideridvalue

我能够获取provider-id值,但是我无法获得web-identity-token的有效值。

如果我理解正确,这应该得到我的web-identity-token:

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --client-id clientidvalue --auth-parameters USERNAME=usernamevalue,PASSWORD=passwordvalue

我从Federated Identities池中获得了clientidvalue。

我无法解决的问题是上面的命令给了我这个错误:

未知选项:PASSWORD = <密码>

我尝试了许多不同的变体,包括json格式,但没有任何作用。我究竟做错了什么?

aws-lambda postman aws-cli aws-cognito
2个回答
3
投票

这个对我有用。我看不出你的任何不同

Terminal Screenshot

您使用的是在用户池“应用客户端”部分(而非联合身份部分)创建的应用客户端ID吗?如果是,是否选中此选项?

为基于应用程序的身份验证启用用户名密码(非SRP)流(USER_PASSWORD_AUTH)

我在3600之后使用令牌直到下一个空格。把它放在postman标题上,然后在Cognito Authorizer后面调用lambda。

UPDATE

如果有人对单命令shell脚本版本感兴趣 - > Bash Script

我经常使用它


0
投票

以下是用于验证和接收身份验证令牌的AWS CLI命令:

aws cognito-idp initiate-auth --region YOU_REGION --auth-flow USER_PASSWORD_AUTH --client-id YOUR_CLIENT_ID --auth-parameters USERNAME=YOUR_EMAIL,PASSWORD=YOUR_PASSWORD

aws cognito-idp initiate-auth --region us-west-2 --auth-flow USER_PASSWORD_AUTH --client-id 7f2spb636ptn074on1pdjgnk9l --auth-parameters [email protected],PASSWORD=Z3qj88WTJCi9DX6RRVFWtdv

响应

{
    "ChallengeParameters": {},
    "AuthenticationResult": {
        "RefreshToken": "eyJjdH......89kXQjZ9thA",
        "AccessToken": "eyJra......xB9eQ",
        "ExpiresIn": 3600,
        "TokenType": "Bearer",
        "IdToken": "eyJraWQiOiJh....PfRUcDeEw"
    }
}

如果出现错误{"__type":"InvalidParameterException","message":"USER_PASSWORD_AUTH flow not enabled for this client"},则需要启用USER_PASSWORD_AUTH。

转到您的AWS Cognito仪表板 - >“App Clients” - >“Show Details” - >选中“启用用户名密码(非SRP)流程以进行基于应用程序的身份验证(USER_PASSWORD_AUTH)”

© www.soinside.com 2019 - 2024. All rights reserved.