Amazon web services 在AmazonAPI网关中使用API密钥

Amazon web services 在AmazonAPI网关中使用API密钥,amazon-web-services,aws-lambda,amazon-cognito,aws-api-gateway,Amazon Web Services,Aws Lambda,Amazon Cognito,Aws Api Gateway,我已经创建了一个API密钥并将其添加到我的函数中。然后我部署了api并对其进行了测试,但仍然得到: "message": "Forbidden" 当我一直在使用“x-api-key”时,如何通过JSON请求传递api密钥:“密钥”?我希望您不会错过将api密钥与api链接的机会 将x-api-key参数作为HTTP头参数传递(即,它不会添加到JSON正文中)。如何传递HTTP头取决于您使用的HTTP客户端 例如,如果使用curl并假设发布JSON有效负载

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

"message": "Forbidden"

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

我希望您不会错过将api密钥与api链接的机会
x-api-key
参数作为HTTP头参数传递(即,它不会添加到JSON正文中)。如何传递HTTP头取决于您使用的HTTP客户端

例如,如果使用curl并假设
发布
JSON有效负载,则请求看起来类似(将
[api id]
替换为实际id,将
[region]
替换为api的AWS区域):


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


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

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

  • 您必须将“x-api-key”HTTP头参数传递给api网关

  • 必须创建API密钥

  • 此外,您需要在API网关控制台上检查API密钥的使用计划


  • 如果将“API”键required设置为true,则需要将API键作为标头传递

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

  • 你有使用计划吗?如果不需要,请创建一个
  • 将API与使用计划链接。为此,添加一个阶段,它将链接您的API
  • 你有API密钥吗?如果没有,您需要创建一个API密钥并启用它
  • 将与API链接的使用计划添加到此API密钥。为此,请添加使用计划

  • 对于通过公共DNS访问的私有API网关,如果配置了“x-API-key”,我们需要传递附加的“x-apigw-API-id”头,该头带有API id

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

    其记录如下:


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

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

    密钥:x-api-Key

    值:您的api键值


    添加到:Header

    是的,我在ios sdk中使用NSMutableURLRequest*请求,然后您也可以添加密钥,它也可以工作。有没有一种方法可以使用我们自己的自定义头名称而不是“x-api-key”头名称?这为我解释了!我刚刚遇到了同样的问题。我花了半个小时才弄明白发生了什么事。这个糟糕的错误消息:
    {“message”:“禁止”}
    一点帮助都没有。谢谢!!经典AWS。只需错过文档中的一个重要部分,而不告诉您错误消息中的问题是什么或如何解决。谢谢,这帮我解决了问题。这帮了我的忙。别忘了再次部署!我找到解决方案的方法是激活日志记录。这需要apigateway具有AmazonAPIGatewayPushToCloudWatchLogs权限的角色。在日志记录中,消息实际上非常清楚:“API密钥******未授权,因为方法‘POST/predict’需要API密钥,并且API密钥未与API阶段x__________;y/stg的使用计划关联:找不到密钥和API阶段的使用计划”谢谢。我认为aws文档还远没有明确提到这一点。直到我创建了一个使用计划,它才对我起作用。我想这应该没有必要。谢谢很棒的音符。谢谢。我的问题是我错误地为公共api网关包含了这个x-apigw-api-id头。移除它对我有用。
    $ curl -X POST -H "x-api-key: theKey" -H "Content-Type: application/json" -d '{"key":"val"}' https://[api-id].execute-api.[region].amazonaws.com