Sto tentando di creare un URL S3 firmato utilizzando Javascript & NodeJS. Ho usato la specifica this .Creazione di un URL S3 con segno con Javascript
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
Questo crea un URL simile a questo:
https://s3-eu-west-1.amazonaws.com/mybucket/test.txt?AWSAccessKeyId=XXXXXX&Expires=1331290899&Signature=EciGxdQ1uOqgFDCRon4vPqTiCLc%3D
Tuttavia, ricevo il seguente errore quando si accede a esso:
SignatureDoesNotMatch
The request signature we calculated does not match the signature you provided.
Check your key and signing method.
Che cosa sto facendo di sbagliato durante la creazione della firma?
EDIT - TENTATIVO DI KNOX
ora sto tentando di utilizzare Knox per la produzione di un URL firmato. Devo aggiungere delle intestazioni con la richiesta per forzare il download. Ho modificato il seguente:
Aggiunto amazonHeaders: 'response-content-disposition:attachment',
a client.signedUrl- http://jsfiddle.net/BpGNM/1/
Aggiunto options.amazonHeaders + '\n' +
a auth.queryStringToSign
- http://jsfiddle.net/6b8Tm/
Il messaggio che ora viene inviato a auth.hmacSha1
per creare il sig è:
Ho quindi provato ad accedere al mio nuovo URL con lo response-content-disposition=attachment
aggiunto come GET var. Tuttavia, sto ancora ricevendo lo stesso errore sopra indicato.
Avere lo stesso problema come te, è stato mai risolto? –