API, совместимый с Backblaze S3 - предварительно подписанные URL-адреса - Node AWS SDK не работает - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь заставить новый совместимый с Backblaze S3 API работать с предварительно подписанными URL-адресами

Код, который я использую для создания URL-адреса ( исходный источник ):

const aws = require('aws-sdk');

const s3 = new aws.S3({
  accessKeyId: 'XXX',
  secretAccessKey: 'XXX',
  endpoint: 's3.us-west-002.backblazeb2.com',
});

const myBucket = 'bucket-name'
const myKey = 'file-name.pdf'
const signedUrlExpireSeconds = 60 * 5 // I know this is not supported yet.

const url = s3.getSignedUrl('getObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds
})

console.log(url)

URL-адрес сгенерирован правильно:

https://BUCKETNAME.s3.us-west-002.backblazeb2.com/BUCKETKEY?AWSAccessKeyId=XXX&Expires=XXX&Signature=XXX

Но при переходе на сгенерированный URL-адрес внутри браузера я получаю следующую ошибку:

<Error>
   <Code>InvalidRequest</Code>
   <Message>Invalid request parameter received: AWSAccessKeyId</Message>
</Error>

Что я делаю неправильно?

1 Ответ

0 голосов
/ 07 мая 2020

Только что узнал, как это исправить. Версия подписи по умолчанию выглядит v2 с AWS SDK. Просто не забудьте добавить версию подписи в инициализацию S3. В приведенном выше примере:

const url = s3.getSignedUrl('getObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds
    signatureVersion: 'v4'
})

Подробнее: https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html

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