编程语言
首页 > 编程语言> > php – API Gateway不接受AWS Cognito Generated Credentials

php – API Gateway不接受AWS Cognito Generated Credentials

作者:互联网

我已经设置了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中传递会话令牌,我之前没有通过它(我不知道放在哪里).

标签:php,amazon-web-services,aws-api-gateway,amazon-cognito
来源: https://codeday.me/bug/20190829/1758094.html