【问题标题】:Using an API key in Amazon API Gateway在 Amazon API Gateway 中使用 API 密钥
【发布时间】:2016-12-27 21:55:17
【问题描述】:

我创建了一个 API 密钥并将其添加到我的函数中。然后我已经部署了 api 并对其进行了测试,但仍然得到:

"message": "Forbidden"

我一直在使用“x-api-key”:“theKey”,如何通过 JSON 请求传递 api 密钥?

【问题讨论】:

  • 这个post 为我解释了它!

标签: amazon-web-services aws-lambda amazon-cognito aws-api-gateway


【解决方案1】:

我必须添加一个 API 使用计划,然后将该计划链接到 API 阶段。

似乎这是将密钥链接到 API 的唯一方法,不确定这是否是 AWS 上的最新更改。

【讨论】:

  • 我刚刚遇到了同样的问题。我花了半个小时才弄清楚发生了什么事。这个糟糕的错误消息:{"message":"Forbidden"} 根本没有帮助。谢谢 AWS!
  • 经典 AWS。只是错过了文档的重要部分,并且不要告诉您错误消息中的问题是什么或如何解决它。谢谢,这为我解决了。
  • 这对我有帮助。
  • 别忘了再次部署!
  • 我找到解决方案的方法是激活日志记录。这需要具有 AmazonAPIGatewayPushToCloudWatchLogs 权限的 apigateway 角色。在日志中,消息实际上很清楚:“API Key ***** 未授权,因为方法 'POST /predict' 需要 API Key 并且 API Key 与 API 阶段 x______y/stg 的使用计划没有关联:无使用为密钥和 API 阶段找到计划”
【解决方案2】:

x-api-key 参数作为 HTTP 标头参数传递(即它不添加到 JSON 正文中)。您传递 HTTP 标头的方式取决于您使用的 HTTP 客户端。

例如,如果您使用 curl 并假设您 POST JSON 有效负载,则请求将类似于(您将 [api-id] 替换为实际 ID,将 [region] 替换为 API 的 AWS 区域) :

$ curl -X POST -H "x-api-key: theKey" -H "Content-Type: application/json" -d '{"key":"val"}' https://[api-id].execute-api.[region].amazonaws.com

【讨论】:

  • 是的,我在 ios sdk 中使用了 NSMutableURLRequest *request,然后你也可以添加密钥,它就可以工作了
  • 有没有办法使用我们自己的自定义标头名称而不是“x-api-key”标头名称?
  • 在 2021 年仍然相关 - 您会认为 AWS 文档会更具体地说明如何(例如在 Postman 中)提供 API 密钥来测试此功能
【解决方案3】:

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

  1. 您必须将“x-api-key”HTTP 标头参数传递给 API 网关。

  2. 必须创建 API 密钥。

  3. 另外,您需要在 API Gateway 控制台上查看 API Key 的使用计划。

【讨论】:

  • 谢谢。我认为 aws 文档并不清楚提及这一点。
  • 在我创建使用计划之前,它对我不起作用。我猜这不应该是必要的。谢谢!
【解决方案4】:

如果将 'API' key required 设置为 true,则需要将 api 密钥作为标头传递。

API 密钥作为标头字段“x-api-key”传递。即使在标题中添加此字段后,也可能会出现此问题。在这种情况下,请验证以下几点

  1. 您有使用计划吗?如果不需要创建一个。
  2. 将您的 API 与使用计划相关联。为此添加一个阶段,它将链接您的 API
  3. 您有 API 密钥吗?如果不是,您需要创建一个 API 密钥并启用它。
  4. 将与您的 API 链接的使用计划添加到此 API 密钥。为此,请添加使用计划。

【讨论】:

  • 很棒的笔记。谢谢。
【解决方案5】:

希望您不要错过将 API 密钥与 API 关联起来

【讨论】:

    【解决方案6】:

    我能够在 Postman 本机应用程序中使用以下配置从 Lambda 获得成功的响应 -

    在授权选项卡下(由于某种原因,当我在标题下传递相同的参数时,这不起作用)

    密钥:x-api-key

    值:你的 api 键值

    添加到:页眉

    【讨论】:

      【解决方案7】:

      对于通过公共 DNS 访问的私有 API 网关,我们需要传递额外的“x-apigw-api-id”标头以及 api id 以及“x-api-key”(如果已配置)。

      curl -v https://{vpce-id}.execute-api.{region}.vpce.amazonaws.com/test -H 'x-apigw-api-id:{api-id}'

      它记录在下面,

      https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-api-test-invoke-url.html#w20aac13c16c28c11

      【讨论】:

      • 我的问题是我错误地为公共 API 网关包含了这个 x-apigw-api-id 标头。删除它对我有用。
      【解决方案8】:

      我没有足够的声誉将此设置为评论,但我终于能够找到指定“x-api-key”属于来自外部客户端的 API 网关调用的标头中的文档(例如邮递员、招摇等)在 AWS 文档中。

      相关部分:

      要使用标头来源的 API 密钥:

      1. 使用所需的 API 方法创建 API。并将 API 部署到 阶段。
      2. 创建一个新的使用计划或选择一个现有的。添加部署的 使用计划的 API 阶段。将 API 密钥附加到使用计划或 选择计划中的现有 API 密钥。记下选择的 API 密钥 价值。
      3. 将 API 方法设置为需要 API 密钥。
      4. 将 API 重新部署到同一阶段。如果您将 API 部署到新的 阶段,确保更新使用计划以附加新的 API 阶段。

      客户端现在可以在提供 x-api-key 的同时调用 API 方法 以所选 API 密钥作为标头值的标头。

      Choose an API key source

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 2019-01-07
        • 1970-01-01
        • 2016-10-06
        • 2021-04-17
        • 1970-01-01
        相关资源
        最近更新 更多