Тестирование AWS API-шлюза cURL - PullRequest
0 голосов
/ 27 января 2020

У меня есть простая реализация AWS API-шлюза, защищенная авторизацией AWS_IAM.

Я просто хочу проверить из командной строки через cURL:

curl --location --request GET 'https://<API_ID>.execute-api.eu-west-1.amazonaws.com/stage?type=type&category=category&lc=lc&passprhase=passprhase&product=product'
--header 'Authorization: AWS4-HMAC-SHA256 Credential=<AWS_ACCESS_KEY>/20200127/eu-west-1/execute-api/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=<AWS_SECRET_ACCESS_KEY>' --header 'Content-Type: application/json' \
--data-raw '{"query":"","variables":{}}'

, но продолжаю получать следуйте за ошибкой:

Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header.

Может кто-нибудь посоветовать, что я делаю не так?

1 Ответ

0 голосов
/ 28 января 2020

Авторизация AWS_IAM использует Sigv4 , и для ее расчета требуются значения определенных заголовков - Дата является одним из них. Вы передаете x-amz-date как часть поля «SignedHeaders», но фактически не передаете его с другими заголовками.

Один из способов создать правильную команду curl для вызова API с AWS_IAM будет использовать приложение почтальона . Добавьте URL-адрес API и выберите «AWS Подпись» на вкладке «Авторизация». Затем вы можете выбрать опцию «Код» и получить полную команду curl, которая будет выглядеть примерно так -

curl -X POST \
  https://$API-ID.execute-api.$AWS_REGION.amazonaws.com/$STAGE/$RESOURCE \
  -H 'authorization: AWS4-HMAC-SHA256 Credential=$ACCESS_KEY/20200128/$AWS_REGION/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=$SIGNATURE_VALUE' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -H 'host: API-ID.execute-api.$AWS_REGION.amazonaws.com' \
  -H 'postman-token: 15f9498e-95b7-f22b-eed9-016cdea07424' \
  -H 'x-amz-date: $DATE_STAMP'

Создать канонический запрос на подпись версии 4

...