Вызов API Amazon AWS в React - PullRequest
       0

Вызов API Amazon AWS в React

0 голосов
/ 29 декабря 2018

Я пытаюсь подключиться к сервису AWS через вызов API из React с использованием fetch (). Это код вызова (**** является цензурированным контентом):

  fetch("https://runtime.lex.us-east-1.amazonaws.com/bot/****/alias/****/user/****/text", {
      method: "POST",
      body: "inputText: hi",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded",
        "Host": "runtime.lex.us-east-1.amazonaws.com",
        "X-Amz-Date": "20181229T190205Z",
        "Authorization": "AWS4-HMAC-SHA256 Credential=*****/20181229/us-east-1/lex/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=*****************************************",
        "Content-Length": "27"
      }
    })

То же самоеВызов API с теми же заголовками работает с приложением Postman в chrome и возвращает действительный ответ.

При вызове этого API с помощью fetch я получаю сообщение об ошибке:

 message: "The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details."

Это происходит, хотяЯ использую то же содержимое заголовков, что и вызов API от почтальона, что должно быть хорошо в течение 5 минут без пересчета подписи на основе новой даты.

Одна вещь, которую я заметил, заключается в том, что заголовок "Хост" неПо запросу в инструментах разработчика -> вкладка «Сеть» в Chrome.

Это может быть связано с проблемой?Я не могу понять, почему это не появляется там, потому что я четко устанавливаю этот заголовок.Вот заголовки запросов, которые я вижу (вверху есть сообщение: «Отображаются временные заголовки»):

Authorization: AWS4-HMAC-SHA256 Credential=***************/20181229/us-east-1/lex/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=************************
Content-Type: application/x-www-form-urlencoded
Origin: http://localhost:3000
Referer: http://localhost:3000/
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
X-Amz-Date: 20181229T190205Z

1 Ответ

0 голосов
/ 30 декабря 2018

У меня было это раньше.Я не могу вспомнить, какой из них это исправил, но вот две вещи, которые стоит попробовать:

  1. Не используйте одинаковые заголовки из Почтальона, они могут быть одноразовыми.Создайте свой собственный sigv4 из внешнего интерфейса.

  2. Убедитесь, что вы отправляете дату в формате UTC.У меня были похожие проблемы, когда мои тесты CI / CD не удавались, так как env узла образа докера вычислял время на основе другого часового пояса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...