gpt4 book ai didi

javascript - 使用 Javascript 创建签名的 S3 URL

转载 作者:数据小太阳 更新时间:2023-10-29 05:06:28 26 4
gpt4 key购买 nike

我正在尝试使用 Javascript 和 NodeJS 创建签名的 S3 URL。我用过this规范。

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

我现在正尝试使用 Knox 生成签名 URL。我需要在请求中添加 header 以强制下载。我编辑了以下内容:

添加 amazonHeaders: 'response-content-disposition:attachment', 到 client.signedUrl- http://jsfiddle.net/BpGNM/1/

options.amazonHeaders + '\n' + 添加到 auth.queryStringToSign - http://jsfiddle.net/6b8Tm/

现在发送到 auth.hmacSha1 以创建 sig 的消息是:

'GET\n\n\n1321374212\nresponse-content-disposition:attachment\n/meshmesh-dev/test/Readme.md'

然后我尝试使用添加为 GET var 的 response-content-disposition=attachment 访问我的新 URL。但是,我仍然收到上述相同的错误。

最佳答案

我会尝试将 Knox 与 Node.Js 一起使用。众所周知,它是一个很好的组合,而且它本身还利用了 Node.JS Crypto 库,这正是您正在尝试做的事情 - 节省您的时间:)

更多信息在这里:https://github.com/LearnBoost/knox

那么,你可以做类似的事情:

var knox = require('knox');
var s3Client = knox.createClient({
key: 'XXX',
secret: 'XXX',
bucket: 'XXX'
});

var expires = new Date();
expires.setMinutes(expires.getMinutes() + 30);
var url = s3Client.signedUrl(filename, expires);

编辑:您还可以查看 Knox 并检查 signedUrl 函数的作用并自己实现它。您可以添加到 auth.signQuery 调用一个名为 amazonHeaders 的额外选项:

Client.prototype.signedUrl = function(filename, expiration){
var epoch = Math.floor(expiration.getTime()/1000);
var signature = auth.signQuery({
amazonHeaders: 'response-content-disposition:attachment',
secret: this.secret,
date: epoch,
resource: '/' + this.bucket + url.parse(filename).pathname
});

return this.url(filename) +
'?Expires=' + epoch +
'&AWSAccessKeyId=' + this.key +
'&Signature=' + encodeURIComponent(signature);
};

晒。

关于javascript - 使用 Javascript 创建签名的 S3 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8134799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com