【发布时间】:2015-03-22 07:26:25
【问题描述】:
我在使用 amazon s3 身份验证时遇到问题。
并且错误指向亚马逊授权。 它说。
AWS 授权标头无效。预期的 AwsAccessKeyId:签名
这里是我的代码:
// set default values for optional params first
bucket = bucket || null;
path = path || '/';
query = query || [];
data = data || null;
headers = headers || [];
amazon = amazon || null;
//get host - bucket1.s3.amazonaws.com
var host = this._getHost(bucket);
//get url - http://bucket1.s3.amazonaws.com/some/path
var url = this._getUrl(host, path, query);
//get path - /bucket1/some/path
var path = this._getPath(bucket, path);
hashed().ksort(amazon);
// initiatialize variables needed
var restHeaders = amazonHeaders = [];
headers.Host = host;
headers.Date = time().toDate(Date.now(), 'D, d M Y H:i:s T', true);
for (var header in amazon) {
restHeaders.push(header+': '+amazon[header]);
amazonHeaders.push(header.toLowerCase()+':'+amazon[header]);
}
for (var header in headers) {
restHeaders.push(header+': '+headers[header]);
}
amazonHeaders = '\n'+amazonHeaders.join('\n');
if(!amazonHeaders.trim()) {
amazonHeaders = null;
}
if(!(typeof headers['Content-MD5'] !== 'undefined')) {
headers['Content-MD5'] = null;
}
if(!(typeof headers['Content-type'] !== 'undefined')) {
headers['Content-Type'] = null;
}
//get signature
var signature = [
action,
headers['Content-MD5'],
headers['Content-Type'],
headers['Date']+amazonHeaders,
path];
signature = signature.join('\n');
if(headers.Host == 'cloudfront.amazonaws.com') {
signature = headers.Date;
}
restHeaders.push('Host: '+host);
restHeaders.push('Date: '+headers.Date);
restHeaders.push('Authorization: '+this._getSignature(signature));
请帮助我,我永远坚持这一点。
【问题讨论】:
-
我不清楚
this._getSignature(signature)正在返回什么或您实际尝试使用哪个版本的 S3 授权 (V2/V4)(它看起来像(可能)V2,我不知道您为什么要这样做,因为只有 V4 在所有 S3 区域都有效)。
标签: node.js amazon-web-services amazon-s3