Проблема с подписанным URL-адресом AWS - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь отправить запрос в AWS с подписью с помощью реализации AWS Signature v4 для веб-браузеров.

Мой запрос выглядит так: GET / test? Id = ID-12

Я получаюОшибка 403 с сообщением типа:

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.

The Canonical String for this request should have been
'GET
/test

accept:*/*
...

поэтому, как вы видите, здесь нет параметра, который, как мне кажется, проблема, но что я не понимаю, как AWS может сделать предложение о том, что должно было быть?Я имею в виду подпись представляет собой хэш, нет?Или я что-то упустил?Заранее спасибо!

1 Ответ

2 голосов
/ 27 сентября 2019

Немного упрощая процесс, AWS использует HMAC для генерации подписи.

Одним из ключевых принципов является то, что HMAC не шифрует сообщение.Сообщение должно быть отправлено вместе с хешем HMAC.Принимающая сторона снова рассчитает HMAC и проверит результаты.

AWS явно говорит об этом в документации Signature :

Когда сервис AWSПолучив запрос, он выполняет те же действия, что и вы, чтобы вычислить подпись, отправленную вами в вашем запросе.Затем AWS сравнивает рассчитанную подпись с той, которую вы отправили с запросом.Если подписи совпадают, запрос обрабатывается.Если подписи не совпадают, запрос отклоняется.

Чтобы ответить на ваш явный вопрос: строка, которую они показывают вам, которую они использовали для генерации «канонической строки», получена из HTTPзапрос сам.Тип HTTP как «GET» в первой строке, путь, переданный GET во второй строке и т. Д.

Другими словами, они ожидают, что вызывающая сторона поймет, как будет выглядеть запросзаранее сгенерируйте строку Canonical String, запустите на ней алгоритм подписи и общий секрет секретного ключа доступа и включите полученный хеш в запрос.Затем, со своей стороны, они берут элементы из HTTP-запроса, снова запускают этот процесс и проверяют правильность результата.

В случае вашей неудачи, если вы опубликуете, как вы генерируете заданный URL-адрес, мы могли быдиагностировать, где происходит сбой.

...