【问题标题】:Authenticate AWS API gateway with AWS_IAM and API key from REST client Postman使用来自 REST 客户端 Postman 的 AWS_IAM 和 API 密钥对 AWS API 网关进行身份验证
【发布时间】:2016-08-04 10:54:12
【问题描述】:

我正在尝试使用邮递员休息客户端访问经过身份验证的 POST API 网关,但我收到状态 403 并显示禁止消息。

{ “消息”:“禁止” }

我正在使用带有 AccessKey、SecretKey、AWS 区域和服务名称的 AWS 签名身份验证。我不明白为什么它不允许我的休息电话,这与我的 AccessKey 和 SecretKey 对缺乏授权有关吗? (我的用户是管理员)

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/dev/score",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "input1=1&input2=2",
  CURLOPT_HTTPHEADER => array(
    "authorization: AAAA-AAAA-XXX123 Credential=XXXXXXXXXX/20160414/us-west-2/execute-api/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sdddddssdddddddddddddddddsdsdsdsdsdsdsdsdsdsd",
    "cache-control: no-cache",
    "content-type: application/javascript",
    "host: xxxxxxxxxx.execute-api.us-west-2.amazonaws.com",
    "postman-token: abf462fe-24ae-244d-ba8d-d3e953f0e712",
    "x-amz-date: 20160414T084331Z"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

【问题讨论】:

    标签: rest amazon-web-services aws-lambda postman aws-api-gateway


    【解决方案1】:

    如果您使用 API 密钥,请确保设置“x-api-key”标头。

    在创建使用计划并将该计划链接到 API 阶段和 API 密钥之前,我也遇到了同样的问题。

    【讨论】:

      【解决方案2】:

      如果您将“需要 API 密钥”选项设置为 true,请检查以下内容。

      1. 部署您的 API 以更新更改。
      2. 您必须将“x-api-key”HTTP 标头参数传递给 API 网关。
      3. 必须创建 API 密钥。
      4. 另外,您需要在 API Gateway 控制台查看 API Key 的使用计划。

      【讨论】:

        【解决方案3】:

        这可能有多种原因,您介意分享一个失败的示例设置吗?

        请检查以下内容:

        1. 您是否部署了 API?
        2. 用户是否有适当的权限?您可以使用托管 IAM 策略“AmazonAPIGatewayInvokeFullAccess”或创建您自己的策略。请参阅我们的documentation 了解更多详情。

        最好的,

        Jurgen,API 网关

        【讨论】:

        • 我已经检查了模拟器的权限,并且确实用户有权调用 api,并且我也部署了 API。 API 无需身份验证即可正常工作,但是当我使用 IAM 和 API 密钥添加身份验证时,我无法访问。我确信它与身份验证有关,但我无法识别它。 PS:我已经添加了有问题的代码。
        • 最近邮递员和AWS授权似乎出现了一些问题(见github.com/postmanlabs/newman/issues/360)。虽然这是一个 PATCH 操作,但不确定它是否与 POST 相同。您可以尝试更新您的邮递员客户端吗?
        • 我使用的是 POST 方法,而不是问题中提到的 PATCH 方法,我使用的是最新版本的邮递员,即 v 4.1.3
        【解决方案4】:

        当 API 未部署到 API Gateway 或您访问错误的路径 /your-rout 而不是 /api-name/your-route 时,通常会发生这种情况。

        【讨论】:

          猜你喜欢
          • 2015-12-12
          • 2021-05-02
          • 1970-01-01
          • 2019-01-07
          • 2017-10-24
          • 1970-01-01
          • 2022-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多