在 AWS JavaScript SDK 中设置签名
Set signature in AWS JavaScript SDK
是否可以在使用 AWS JavaScript SDK 发出 AWS 请求时手动设置签名?我想将文件直接上传到 S3,但我不想让我的密钥以纯文本形式提供给客户端。所有官方示例都要求您对密钥和秘密进行硬编码(同时明确告诉您不要这样做)。我正在计算签名服务器端,但我还没有找到将该签名导入 SDK 的方法。
为此,我最终选择了使用 AWS STS 的另一条路线。但是,如果你确实想做这样的事情,这里是解决方案:
使用 AWS JavaScript SDK,您可以在 AWS.Request
object 上订阅 "Request Building Events"。这些事件(validate
、build
和 sign
)将允许您在请求被执行之前访问和修改请求状态(headers、body 等)发送。大多数调用将 return 一个 AWS.Request
实例(S3 的 .upload
除外)。
这是一个例子:
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
是否可以在使用 AWS JavaScript SDK 发出 AWS 请求时手动设置签名?我想将文件直接上传到 S3,但我不想让我的密钥以纯文本形式提供给客户端。所有官方示例都要求您对密钥和秘密进行硬编码(同时明确告诉您不要这样做)。我正在计算签名服务器端,但我还没有找到将该签名导入 SDK 的方法。
为此,我最终选择了使用 AWS STS 的另一条路线。但是,如果你确实想做这样的事情,这里是解决方案:
使用 AWS JavaScript SDK,您可以在 AWS.Request
object 上订阅 "Request Building Events"。这些事件(validate
、build
和 sign
)将允许您在请求被执行之前访问和修改请求状态(headers、body 等)发送。大多数调用将 return 一个 AWS.Request
实例(S3 的 .upload
除外)。
这是一个例子:
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