最终,我需要为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 =< password>
我尝试了许多不同的变体,包括json格式,但没有任何效果。我做错了什么?
答案 0 :(得分:0)
它对我有用。我看不出你的任何差异
您是否正在使用在用户池'应用客户端'部分(而非联合身份部分)创建的应用客户端ID? 如果是,是否选中此选项?
为基于应用的身份验证启用用户名密码(非SRP)流 (USER_PASSWORD_AUTH)
我正在使用从3600开始直到下一个空格的令牌。把它放在postman标题上,然后在Cognito Authorizer后面调用lambda。
答案 1 :(得分: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 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仪表板->“应用程序客户端”->“显示详细信息”->选中“为基于应用程序的身份验证(USER_PASSWORD_AUTH)启用用户名-密码(非SRP)流”复选框