Estoy intentando crear una URL S3 firmada usando Javascript & NodeJS. He utilizado la especificación this .Creación de una URL S3 firmada 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
Esto crea una URL similar a esta:
https://s3-eu-west-1.amazonaws.com/mybucket/test.txt?AWSAccessKeyId=XXXXXX&Expires=1331290899&Signature=EciGxdQ1uOqgFDCRon4vPqTiCLc%3D
Sin embargo, recibo el siguiente error al acceder a él:
SignatureDoesNotMatch
The request signature we calculated does not match the signature you provided.
Check your key and signing method.
¿Qué estoy haciendo mal al crear la firma?
EDITAR - INTENTO CON KNOX
ahora que estoy tratando de utilizar Knox para producir una URL firmada. Necesito agregar encabezados con la solicitud para forzar la descarga. He editado el siguiente:
Agregado amazonHeaders: 'response-content-disposition:attachment',
a client.signedUrl- http://jsfiddle.net/BpGNM/1/
Agregado options.amazonHeaders + '\n' +
a auth.queryStringToSign
- http://jsfiddle.net/6b8Tm/
El mensaje que está siendo enviado a auth.hmacSha1
para crear el SIG es:
'GET\n\n\n1321374212\nresponse-content-disposition:attachment\n/meshmesh-dev/test/Readme.md'
He intentado acceder a mi nueva URL con el response-content-disposition=attachment
agregado como GET var. Sin embargo, sigo recibiendo el mismo error indicado anteriormente.
Teniendo el mismo problema que usted, ¿se ha resuelto alguna vez? –