AWS CLI - 如何为 Cognito 用户生成安全令牌
AWS CLI - how to generate security tokens for a cognito user
最后,我需要为 Cognito 用户池中的用户生成 AccessKeyId、SecirutyKey 和 SessionToken,这样我就可以使用 Postman 作为 Cognito 用户测试 lambda 函数。到目前为止,我已经花了 2 天时间试图解决这个问题。这似乎行得通:
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 的有效值。
如果我理解正确的话,这应该能让我获得网络身份令牌:
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --client-id clientidvalue --auth-parameters USERNAME=usernamevalue,PASSWORD=passwordvalue
我从联合身份池中获取了 clientidvalue。
我一直无法解决的问题是上面的命令给我这个错误:
Unknown options: PASSWORD=<password>
我尝试了很多不同的变体,包括 json 格式,但没有任何效果。我做错了什么?
对我有用。我看不出和你有什么区别
您是否使用在用户池 'App clients' 部分(而非联合身份部分)创建的应用程序客户端 ID?
如果是,是否选中此选项?
Enable username-password (non-SRP) flow for app-based authentication
(USER_PASSWORD_AUTH)
我正在使用从 3600 开始到下一个空格的令牌。把它放在 postman header 上并在 Cognito Authorizer 后面调用 lambda。
更新
如果有人对单个命令感兴趣 shell 此脚本版本 -> Bash Script
我经常用
这是用于验证和接收授权令牌的 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 USERNAME=alice@example.com,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" -> 勾选 "Enable username-password (non-SRP) flow for app-based authentication (USER_PASSWORD_AUTH)"
我今天遇到了同样的问题,请求因错误而失败
"Unknown options: PASSWORD=".
仔细查看请求后,我意识到我在逗号 (,) 和 PASSWORD 参数之间有一个 space。如下所示:
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=xxxxx, PASSWORD=yyyy --client-id my-app-client-id
按如下方式更改后(删除 space 后)我让它工作了
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=xxxxx,PASSWORD=yyyy --client-id my-app-client-id
最后,我需要为 Cognito 用户池中的用户生成 AccessKeyId、SecirutyKey 和 SessionToken,这样我就可以使用 Postman 作为 Cognito 用户测试 lambda 函数。到目前为止,我已经花了 2 天时间试图解决这个问题。这似乎行得通:
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 的有效值。
如果我理解正确的话,这应该能让我获得网络身份令牌:
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --client-id clientidvalue --auth-parameters USERNAME=usernamevalue,PASSWORD=passwordvalue
我从联合身份池中获取了 clientidvalue。
我一直无法解决的问题是上面的命令给我这个错误:
Unknown options: PASSWORD=<password>
我尝试了很多不同的变体,包括 json 格式,但没有任何效果。我做错了什么?
对我有用。我看不出和你有什么区别
您是否使用在用户池 'App clients' 部分(而非联合身份部分)创建的应用程序客户端 ID? 如果是,是否选中此选项?
Enable username-password (non-SRP) flow for app-based authentication (USER_PASSWORD_AUTH)
我正在使用从 3600 开始到下一个空格的令牌。把它放在 postman header 上并在 Cognito Authorizer 后面调用 lambda。
更新
如果有人对单个命令感兴趣 shell 此脚本版本 -> Bash Script
我经常用
这是用于验证和接收授权令牌的 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 USERNAME=alice@example.com,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" -> 勾选 "Enable username-password (non-SRP) flow for app-based authentication (USER_PASSWORD_AUTH)"
我今天遇到了同样的问题,请求因错误而失败
"Unknown options: PASSWORD=".
仔细查看请求后,我意识到我在逗号 (,) 和 PASSWORD 参数之间有一个 space。如下所示:
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=xxxxx, PASSWORD=yyyy --client-id my-app-client-id
按如下方式更改后(删除 space 后)我让它工作了
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=xxxxx,PASSWORD=yyyy --client-id my-app-client-id