使用来自 REST 客户端 Postman 的 AWS_IAM 和 API 密钥对 AWS API 网关进行身份验证

Posted

技术标签:

【中文标题】使用来自 REST 客户端 Postman 的 AWS_IAM 和 API 密钥对 AWS API 网关进行身份验证【英文标题】:Authenticate AWS API gateway with AWS_IAM and API key from REST client Postman 【发布时间】: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;

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

请检查以下内容:

    您是否部署了 API? 用户是否有适当的权限?您可以使用托管 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 时,通常会发生这种情况。

【讨论】:

以上是关于使用来自 REST 客户端 Postman 的 AWS_IAM 和 API 密钥对 AWS API 网关进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 REST 客户端 POSTMAN 使用 api 密钥调用 AWS api 网关端点

Spring REST / Swagger / Postman - 正在下载损坏/空白文件

如何从 Postman REST 客户端发送 spring csrf 令牌?

Yii REST POST 在 POSTMAN 中不工作,但在框架中工作

以 InputStream 格式将文本文件从 .Net http 客户端上传到 Java REST API

DjangoRestFramework,解释器组件, Postman,