使用AWS JavaScript SDK发出AWS请求时是否可以手动设置签名?我想直接将文件上传到S3,但我不想让我的密钥以明文形式提供给客户端。所有官方示例都要求您对密钥和密钥进行硬编码(同时明确告诉您不要这样做)。我正在计算签名服务器端,但我还没有办法将该签名放入SDK中。
答案 0 :(得分:1)
我最终使用AWS STS为此做了一个不同的路线。但是,如果你想做这样的事情就是解决方案:
使用AWS JavaScript SDK,您可以在AWS.Request
对象上订阅“请求构建事件”。这些事件(validate
,build
和sign
)将允许您在发送请求之前访问和修改请求状态(标题,正文等)。大多数调用都会返回AWS.Request
个实例(除了.upload
以外的S3)。
以下是一个例子:
var request = s3.putObject({
Bucket: 'MyBucket',
Key: file.name,
ContentType: file.contentType,
Body: file
});
request.on('sign', function() {
request.httpHeaders.Authorization = 'AWS Signature';
});
request.send(function(err, data) {
// Do something here
});
我认为这里的诀窍是在创建请求(我的示例中为.putObject
)并使用.send
方法启动请求时不指定回调。
文档:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html