Может ли кто-нибудь помочь мне выяснить, что происходит?
Я пытаюсь загрузить тестовое приложение, в которое пользователь может загружать и скачивать файлы.
Путешествие:
Шаг 1: Когда пользователь выбирает файл с диска (запрос POST), он создает fileID и путь с uuid.
Ответ выглядит следующим образом: {"id":"FILE-VX-1234","path":"uuid/filename.jpg","uri":["s3://{location}/{uuid}/{filename}?endpoint=s3.dualstack.eu-west-1.amazonaws.com"],"state":"OPEN","size":-1,"timestamp":"2020-02-13T10:59:43.146+0000","refreshFlag":1,"storage":"STORAGEID","metadata":{}
Шаг 2: Использование этих (POST-запрос), который отвечает с помощью s3 uri с помощью оценки ключа ключа, secrettaccesskey и sessionToken.
Ответ выглядит следующим образом: {"uri":["s3://{accesskeyID}:{secretaccesskey}@{storage location}/{uuid}/{filename}?endpoint=s3.dualstack.eu-west-1.amazonaws.com&sessionToken={security token}"]}
Шаг 3: Использование этих и добавленных временных параметров (дата), запрос PUT загружает файл в корзину s3.
Заголовок выглядит следующим образом:
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Authorization: AWS4-HMAC-SHA256 Credential=${accesskeyID}/${currentDate}/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-security-token;x-amz-user-agent, Signature=${secretaccesskey}
Connection: keep-alive
Content-Length: 145541
Content-Type: image/jpeg
Host: <the host address>
Origin: https://{url}
Referer: https://{url}/upload/
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
X-Amz-Content-Sha256: UNSIGNED-PAYLOAD
X-Amz-Date:${currentDateInUTC}
x-amz-security-token: ${sessionToken}
X-Amz-User-Agent: aws-sdk-js/2.409.0 callback
Ошибка: SignatureDoesNotMatch
Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой ключ и метод подписи.
Я проверил правильность подписи (secrettaccesskey), accesskeyID и sessionToken, которые передаются в запросе PUT.
Примечание. Дополнительные параметры date и "{region} / s3 / aws4_request, SignedHeaders = host; x-amz-content-sha256; x-amz-date; x-amz-security-token; x-amz-user-agent" в Ошибка авторизации жестко запрограммирована.