当前位置: 首页 > 知识库问答 >
问题:

使用来自REST客户端邮递员的AWS_IAM和API密钥验证AWS API网关

凤伟泽
2023-03-14

我正在尝试使用postman rest客户端访问经过身份验证的POST API网关,但我得到的状态是403,并带有禁止的消息。

{"消息":"禁止"}

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

$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;
}

共有3个答案

隆飞驰
2023-03-14

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

请检查以下内容:

  1. 你部署了你的API吗
  2. 用户是否具有适当的权限?您可以使用托管IAM策略“AmazonaPigatewayInvokuelAccess”或创建自己的策略。有关更多详细信息,请参阅我们的文档

最好的,

尤尔根,API网关

公冶兴文
2023-03-14

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

  1. 部署 API 以更新更改。
  2. 您必须将'x-api-key'HTTP标头参数传递给API网关。
  3. 必须创建 API 密钥。
  4. 此外,您需要在 API 网关控制台上查看 API 密钥的使用计划。
岑叶秋
2023-03-14

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

我也有同样的问题,直到我创建了一个使用计划并将该计划链接到API阶段和API密钥。

 类似资料:
  • 我需要用高级REST客户机或Postman for Chrome测试接受JSON的REST API后端。 但是我遇到了一些问题:我只能使用内置表单并使用content-type:application/x-www-form-urlencoded发送请求 当我选择Raw Body并在其中插入内容时,后端会看到req.Body是一个空对象。当我还设置标题“content-type:applicatio

  • 是否可以在AWS API网关上设置客户端TLS身份验证? 我并不是指API网关和Elastic Beanstalk之间,正如这里所描述的那样,而是指客户机和API网关本身之间,可能有一个自定义授权器(例如Lambda),在将请求转发给Elastic Beanstalk之前检查证书的有效性。

  • 我正在尝试使用Postman发出POST请求。我拥有的凭据只是一个API密钥,而不是用户名和密码。 现在在Postman中,只要我选择“基本认证”,它就会提示输入用户名和密码。所以我将这些字段留空,然后转到Headers以给出我自己的授权键值,这给我留下了两个“授权”字段,如屏幕截图所示,我得到了无效的身份验证响应。 使用CLI中的CUrl命令授权工作正常。有解决方法吗?

  • 我需要通过HTTPS调用第三方rest api。我想在spring Boot应用程序中使用假客户端。我有一个关于假客户端和如何使用它进行api调用的想法。但我不确定如何传递证书文件和密钥。下面是我想使用feign Client实现的示例python代码提取。能不能帮我把标记为**的代码合并起来。

  • 对于我们的指向站点VPN,我们希望创建一个根证书。因此我们可以为所有需要登录VPN的合作伙伴创建尽可能多的客户端证书。(Azure虚拟网络) 手工完成这件事很完美。我们生成一个作为根CA的证书(自签名)。我们可以在powershell中这样做:

  • 如何向JMeter脚本添加客户端证书和密钥? 每次我导航到