【发布时间】:2016-01-19 10:42:04
【问题描述】:
使用 AWS JavaScript SDK v2.2.29 的客户端版本(例如 Bower aws-sdk-js)这是可能的(尽管显然不可接受,因为它会将真实的 aws 凭据暴露给客户端):
var region = 'us-east-1',
accessKeyId = 'AZ12341234',
secretAccessKey = 'aBCde1FGhij2KLMnOPqr3TUvwx4YZ';
var creds = new AWS.Credentials(accessKeyId, secretAccessKey);
creds.get(function() {
s3Location = new AWS.S3({
region: my.region,
credentials: creds
});
ready(); // which presents the upload form, binds events, etc..
});
梦想是将流程分成两部分,一个是安全的服务器端,另一个是客户端。
第 1 部分。使用 Nodejs 服务器端版本的 AWS JavaScript SDK(例如 aws-sdk)来执行此操作:
var creds = new AWS.TemporaryCredentials(accessKeyId, secretAccessKey);
creds.get(function() {
var aws = {
accessKeyId: creds.accessKeyId,
sessionToken: creds.sessionToken,
region: my.region,
};
// e.g. makes aws var available to client
res.render('form', {
aws: aws
});
}
第 2 部分。使用客户端版本的 AWS JavaScript SDK(例如 Bower aws-sdk-js)来执行类似的操作:
// e.g. aws = <from-server-side>
var creds = new AWS.Credentials(aws.accessKeyId, null, aws.sessionToken);
creds.get(function() {
s3Location = new AWS.S3({
credentials: creds,
region: aws.region
});
ready();
});
上面的代码似乎可以工作,直到实际的分块上传开始,导致 403:
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the
signature you provided. Check your key and signing method.
</Message>
似乎 S3 SDK 可能会受到限制,即使这样的交易在理论上是可行的,也无法进行分段上传。
这可能吗?有什么想法吗?
【问题讨论】:
标签: javascript node.js amazon-web-services amazon-s3 aws-sdk