Использование ключа API в Amazon API Gateway

Я создал ключ API и добавил его в свои функции. Затем я развернул api и протестировал его, но все равно получил:

"message": "Forbidden"

Как передать ключ api с моим запросом JSON, поскольку я использовал x-api-key: theKey?


person cdub    schedule 21.08.2016    source источник
comment
это объяснило мне это!   -  person phouse512    schedule 26.02.2017


Ответы (7)


Параметр x-api-key передается как параметр заголовка HTTP (т.е. он не добавляется в тело JSON). Способ передачи заголовков HTTP зависит от используемого HTTP-клиента.

Например, если вы используете curl и предполагаете, что вы POST полезные данные JSON, запрос будет выглядеть примерно так (где вы заменяете [api-id] фактическим идентификатором и [region] регионом AWS вашего API):

$ curl -X POST -H "x-api-key: theKey" -H "Content-Type: application/json" -d '{"key":"val"}' https://[api-id].execute-api.[region].amazonaws.com
person matsev    schedule 21.08.2016
comment
Да, я использую запрос NSMutableURLRequest * в ios sdk, который затем вы также можете добавить ключ, и он сработал - person cdub; 22.08.2016
comment
Есть ли способ использовать собственное имя заголовка вместо имени заголовка x-api-key? - person Manik Arora; 26.05.2021

Мне пришлось добавить план использования API, а затем связать план с этапом API.

Похоже, что это единственный способ связать ключ с API, не уверен, что это недавнее изменение в AWS.

person TimoSolo    schedule 07.09.2016
comment
Я столкнулся с той же проблемой. У меня ушло полчаса, чтобы разобраться, что происходит. Это паршивое сообщение об ошибке: {"message":"Forbidden"} вообще не помогло. Спасибо, AWS !! - person kev; 09.11.2017
comment
Классический AWS. Просто пропустите важную часть документации и не говорите, в чем проблема в сообщении об ошибке или как ее исправить. Спасибо, это решило проблему для меня. - person Rich Smith; 15.02.2018
comment
Это мне помогло. - person Shamal Karunarathne; 22.06.2018
comment
все еще запрещается - person Madeo; 27.09.2019
comment
не забудьте развернуть снова! - person AlleyOOP; 08.12.2019
comment
Я нашел решение, активировав ведение журнала. Для этого нужна роль для apigateway с разрешением AmazonAPIGatewayPushToCloudWatchLogs. В журнале сообщение на самом деле очень четкое: API-ключ ***** не авторизован, потому что для метода POST / прогнозировать требуется API-ключ, а API-ключ не связан с планом использования для этапа API x ______ y ​​/ stg: нет плана использования найдено для ключа и этапа API - person peter_v; 22.01.2020
comment
Есть ли способ использовать собственное имя заголовка вместо имени заголовка x-api-key? - person Manik Arora; 26.05.2021

Если вы установили для параметра «Требуется ключ API» значение true, пожалуйста, проверьте ниже.

  1. вам необходимо передать параметр HTTP-заголовка x-api-key в API Gateway.

  2. Ключ API должен быть создан.

  3. Кроме того, вам необходимо проверить план использования ключа API на консоли API Gateway.

person Daniel Jihoon Oh    schedule 21.04.2017
comment
Спасибо. Я думаю, что в документации по AWS об этом далеко не ясно. - person Víctor Hugo; 03.01.2018
comment
У меня ничего не получалось, пока я не создал план использования. Думаю, в этом нет необходимости. Спасибо! - person Andres; 20.02.2019

Если вы установили ключ API в значение true, вам необходимо передать ключ API в качестве заголовка.

Ключ API передается как поле заголовка x-api-key. Эта проблема может возникнуть даже после добавления этого поля в заголовок. В этом случае, пожалуйста, подтвердите следующие пункты

  1. У вас есть план использования? если не нужно его создать.
  2. Свяжите свой API с планом использования. Для этого добавьте этап, он свяжет ваш API
  3. У вас есть API-ключ? если нет, вам нужно создать ключ API и включить его.
  4. Добавьте план использования, связанный с вашим API, в этот ключ API. Для этого добавьте план использования.
person bisw    schedule 29.06.2018
comment
Отличные заметки. Спасибо. - person user1965074; 30.08.2020

Надеюсь, вы не упустили возможность связать ключ API с API  Конфигурация API-шлюза

person Partha    schedule 21.08.2016

Мне удалось получить успешный ответ от Lambda, используя приведенную ниже конфигурацию в собственном приложении Postman -

На вкладке авторизации (по какой-то причине это не сработало, когда я передал те же параметры в заголовке)

Ключ: x-api-key

Значение: ваш-api-ключ-значение

Добавить в: Заголовок

person Abhishek Poojary    schedule 17.06.2019

Для частных шлюзов API, доступных через общедоступный DNS, нам необходимо передать дополнительный заголовок x-apigw-api-id с идентификатором api вместе с x-api-key, если он настроен.

curl -v https: // {vpce-id} .execute-api. {регион} .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

person msounthar    schedule 30.05.2019
comment
Моя проблема заключалась в том, что я по ошибке включил этот заголовок x-apigw-api-id для общедоступного шлюза API. Удаление сработало для меня. - person Skromak; 18.02.2021