使用来自 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 中不工作,但在框架中工作