我已经设置了API网关端点,并启用了IAM授权.
首先,我尝试使用自己的用户凭据(密钥,密钥)访问资源,并且它有效.
然后,我使用身份池设置Cognito.池允许 – 经过身份验证和未经身份验证的访问.
我使用PHP SDK生成了凭据:
$id = $cognitoClient->getId([
'AccountId' => 'xxx',
'IdentityPoolId' => 'xxx',
]);
$credentials = $cognitoClient->getCredentialsForIdentity([
'IdentityId' => $id->get('IdentityId')
])->get('Credentials');
这可以生成凭据 – 正在返回AccessKeyId,SecretKey和SessionToken.
我通过未经身份验证的访问附加的角色定义如下:
信任关系:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "xxx"
}
}
}
]
}
内联政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "cognito-sync:*",
"Resource": [
"arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "cognito-sync:*",
"Resource": [
"arn:aws:cognito-sync:us-east-1:xxxxx:identitypool/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"apigateway:*"
],
"Resource": [
"*"
]
}
]
}
我没有使用该角色附加任何托管策略.
现在,在使用PHP SDK生成凭证后,我使用邮递员访问资源(我使用postman同时使用我的帐户信用卡).此调用给出以下错误:
{“message”:“请求中包含的安全令牌无效.”}
我无法确定这里出了什么问题.
解决方法:
目前,我已经转而使用可以为每个部署生成的Javascript SDK.
使用SDK正在解决问题.我观察到的一件事是我要在SDK中传递会话令牌,我之前没有通过它(我不知道放在哪里).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。