У меня есть приложение стека MEAN, и я пытаюсь позволить пользователям загружать файлы, которые хранятся с помощью Amazon S3. Я генерирую предварительно назначенный URL-адрес для пользователя, но при переходе по этому URL-адресу в Chrome появляется следующее сообщение об ошибке
The request signature we calculated does not match the signature you provided. Check your key and signing method.
Когда я запрашиваю приложение узла из Почтальона, оно генерирует якобы заранее заданный URL с вопросами, но, очевидно, это не работает. Вот мой соответствующий код:
var express=require('express');
var S3 = require('aws-sdk/clients/s3');
var router = express.Router();
router.get('/api/downloadURL', (req,res,next) => {
const s3 = new S3({
apiVersion: '2006-03-01',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
signatureVersion: 'v4',
region: 'us-east-2' // region of my bucket and what it says is expected
});
var s3params = {'Bucket': process.env.S3_BUCKET_NAME, 'Key': 'folder1/file.pdf'}
s3.getSignedUrl('getObject', s3params, function(err, url) {
if (err) res.json(err);
res.json(url);
});
});
При запросе почтальона я получаю URL следующего формата
https://bucketname.s3.us -east-2.amazonaws.com / папка1 / file.pdf? X-Amz-Алгоритм = AWS4-HMAC-SHA256 & X-Amz-удостоверени = ACCESS_KEY_HERE% 2F20180515% 2Fus-восток-2% 2Fs3% 2Faws4_request & X-Amz-Date = 20180515T174606Z & X-Amz-Истекает = 900 & X-Amz-Signature = 89f6b9a6be699fc1e3268bceaf6585d34ed11e077126ba7c634b769f1add4475 & X-Amz-SignedHeaders = хост