AWS Cognito调用get_credentials_for_identity返回的AccessKey ID和Secret是什么
AWS Cognito开发者身份联合临时凭证无法调用API问题解决方案
首先明确基础逻辑:get_credentials_for_identity返回的是AWS STS服务签发的短期临时访问凭证,包含IdentityId、AccessKeyId、SecretAccessKey(你提到的clientSecret)、SessionToken四个核心字段,这类凭证本身就不会和根用户、固定IAM用户的长期凭证一致,属于Cognito身份池的正常设计。
问题根因及修复方案
- IAM角色权限配置错误
你拿到的临时凭证的权限完全绑定Cognito身份池配置的「已认证身份角色」,需要检查两处配置:- 角色的权限策略是否包含目标API的调用权限,如果你加固的是API Gateway接口,需要开放
execute-api:Invoke权限 - 角色的信任关系必须允许
cognito-identity.amazonaws.com服务代入角色,信任策略示例如下:
- 角色的权限策略是否包含目标API的调用权限,如果你加固的是API Gateway接口,需要开放
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "你的Cognito身份池ID"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
get_credentials_for_identity调用参数错误
你当前传入的Logins参数格式有误,开发者身份验证场景下不需要传cognito-identity.amazonaws.com对应的token,直接传入你在身份池控制台配置的自定义开发者提供商名称对应的键值对即可,正确调用示例(Python SDK):response = cognito_identity_client.get_credentials_for_identity( IdentityId='调用get_open_id_token_for_developer_identity返回的IdentityId', Logins={ "你配置的自定义开发者提供商名称": "用户在你自有数据库的唯一ID" } )- Postman签名配置错误
临时凭证调用AWS服务时必须附带SessionToken参数,你在Postman的AWS Signature授权配置中,除了填写AccessKey、SecretKey,必须额外填写Session Token字段,同时确认Region、Service Name和目标API的实际属性匹配:如果是API Gateway部署的接口,服务名填execute-api,区域和API部署区域保持一致。
内容的提问来源于stack exchange,提问作者u0311
相关产品推荐
相关产品推荐

