Как исправить ошибку 'SignatureDoesNotMatch' при подписании URL-адреса S3 в узле? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь получить подписанный URL-адрес файлов, которые я загрузил в корзину S3.Я успешно получаю подписанные URL-адреса, но всякий раз, когда я посещаю их, я получаю сообщение об ошибке Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи.Проверьте свой ключ и метод подписи.

Несмотря на то, что предоставленные мной accessKey и secretAccessKey вполне подходят, потому что я использую те же ключи при помещении объектав контейнере s3.

импорт и конфигурация AWS

const AWS = require('aws-sdk');
const region = 'us-west-1';

AWS.config.update({
 region: region,
});

const s3 = new AWS.S3({
 apiVersion: '2006-03-01',
 accessKeyId: process.env.REACT_APP_AWS_ACCESS_KEY_ID,
 secretAccessKey:  process.env.REACT_APP_AWS_SECRET_ACCESS_KEY,
});
const mainBucketName = 'test-bucket';

метод putObject для загрузки, который получает корзину, ключ и файл в виде параметров

module.exports.putObject = (bucketName, key, file)=>{

return new Promise((resolve, reject)=>{
    const fileName = `${key}-${file.originalname}`;
    s3.putObject({
        Bucket: `${mainBucketName}/${bucketName}`,
        Key: fileName,
        Body: file.buffer,
        ContentType: file.mimetype,

    }, function(err, data){
        if(err)
            reject(err)
        resolve(fileName);
    });
})
}

метод подписания URl

module.exports.getSignedUrls = (bucketName, key)=>{
return s3.getSignedUrl('getObject',{
    Bucket: `${mainBucketName}/${bucketName}`,
    Key: key,
    Expires:3600,
});

}

Это ответ, который я получаю при вызове

getSignedurls('5c63340d8bdeb62f843d8df0','9cf2adefb8061edacfdc71b044e54b17ec6cc887-qqqq.png')

method.

'https://test-bucket.s3.us-west-1.amazonaws.com/5c63340d8bdeb62f843d8df0/9cf2adefb8061edacfdc71b044e54b17ec6cc887-qqqq.png?AWSAccessKeyId=AKIAIFKF7Z2V6SHUBMFA&Expires=1550168664&Signature=33mtb6zMunXNi8W5D95BRfE%2FNqg%3D'

и это ответ, который я получаю, когда посещаю URL

<Error>
 <Code>SignatureDoesNotMatch</Code>
 <Message>
  The request signature we calculated does not match the signature you provided. Check your key and signing method.
 </Message>
 <AWSAccessKeyId>AKIAIFKF7Z2V6SHUBMFA</AWSAccessKeyId>
 <StringToSign>
  GET 1550168664 /test-bucket/5c63340d8bdeb62f843d8df0/9cf2adefb8061edacfdc71b044e54b17ec6cc887-qqqq.png
 </StringToSign>
<SignatureProvided>33mtb6zMunXNi8W5D95BRfE/Nqg='</SignatureProvided>
<StringToSignBytes>
47 45 54 0a 0a 0a 31 35 35 30 31 36 38 36 36 34 0a 2f 61 73 73 65 74 74 72 61 63 6b 65 72 2d 61 74 74 61 63 68 6d 65 6e 74 73 2d 73 74 61 67 69 6e 67 2f 35 63 36 33 33 34 30 64 38 62 64 65 62 36 32 66 38 34 33 64 38 64 66 30 2f 39 63 66 32 61 64 65 66 62 38 30 36 31 65 64 61 63 66 64 63 37 31 62 30 34 34 65 35 34 62 31 37 65 63 36 63 63 38 38 37 2d 71 71 71 71 2e 70 6e 67
</StringToSignBytes>
<RequestId>AC2452AF7131E916</RequestId>
<HostId>
cGcMHQacSYJ3C7e7viZ+CsnfQ0jkxs+uaBCtzmIe3f740euA0uOW5hQcEiTrr5zWXQeCGXZggiw=
</HostId>
</Error>

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