Я пытаюсь подключиться к сервису 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