Я пытаюсь создать подписанный URL-адрес S3, используя Javascript & NodeJS. Я использовал это
спецификация.
var crypto = require('crypto'),
date = 1331290899,
resource = '/myfile.txt',
awskey = "XXXX",
awssecret = "XXXX";
var stringToSign ='GET\n\n\n' + date + '\n\n' + resource;
var sig = encodeURIComponent(crypto.createHmac('sha1', awssecret).update(stringToSign ).digest('base64'));
var url = "https://s3-eu-west-1.amazonaws.com/mybucket" +
resource + "?AWSAccessKeyId=" + awskey + "&Expires="+ date +
"&Signature="+ sig
Это создает URL, похожий на этот:
https://s3-eu-west-1.amazonaws.com/mybucket/test.txt?AWSAccessKeyId=XXXXXX&Expires=1331290899&Signature=EciGxdQ1uOqgFDCRon4vPqTiCLc%3D
Однако при доступе к нему я получаю следующую ошибку:
SignatureDoesNotMatch
The request signature we calculated does not match the signature you provided.
Check your key and signing method.
Что я делаю не так при создании подписи?
РЕДАКТИРОВАТЬ - ПОПЫТКА С НОКСОМ
Я сейчас пытаюсь использовать Knox для создания подписанного URL. Мне нужно добавить заголовки с запросом на принудительную загрузку. Я отредактировал следующее:
Добавлено amazonHeaders: 'response-content-disposition:attachment',
в client.signedUrl- http://jsfiddle.net/BpGNM/1/
Добавлено options.amazonHeaders + '\n' +
в auth.queryStringToSign
- http://jsfiddle.net/6b8Tm/
Сообщение, которое сейчас отправляется на auth.hmacSha1
для создания подписи:
'GET\n\n\n1321374212\nresponse-content-disposition:attachment\n/meshmesh-dev/test/Readme.md'
Затем я попытался получить доступ к своему новому URL с добавлением response-content-disposition=attachment
как GET var. Тем не менее, я все еще получаю ту же ошибку, указанную выше.