AWS 服务器端临时凭证是否可用于客户端 S3 上传
Are AWS server-side TemporaryCredentials usable for client-side S3 upload?
使用 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 部分。使用 AWS JavaScript 开发工具包的 Nodejs 服务器端版本(例如 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 开发工具包的客户端版本(例如 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 开发工具包可能会受到限制,即使这样的交易在理论上是可能的,也不可能进行分段上传。
这应该可能吗?有什么想法吗?
对于您的特定问题,您应该查看这些凭据的角色/策略,并确保允许分段上传。
另一种解决方案是客户端请求服务器返回签名 URL,该 URL 允许客户端将文件直接获取/发布到 S3(不使用 AWS API,而是直接使用 HTTP)。
我使用FineUploader来做到这一点(用于上传),他们有一堆示例应该给你一个想法(即使你不想使用FineUploader)如何做到这一点:
http://docs.fineuploader.com/branch/master/endpoint_handlers/amazon-s3.html
赫鲁古也有一个例子:https://devcenter.heroku.com/articles/s3-upload-node
但是您正在做的事情(或使用 Cognito 做类似的事情)应该有效。因此,问题必须与要创建的临时凭证关联的角色/策略相关。
- 用于编写与我作为客户端查看的网页交互的脚本的术语(如果有的话)是什么
- 应用程序引擎终结点:用于OAuth2授权的Javascript客户端库需要多个弹出窗口
- 将 package.json 用于客户端包,可以在浏览器中动态加载
- 您是否需要将 API 密钥用于客户端应用程序的谷歌地图 API
- 用于客户端-服务器通信和安全的 API 密钥
- 任何适用于iOS的WebRTC客户端实现
- 注册客户端脚本不适用于设置数组值
- 有哪些技术可用于 RIA 开发的客户端和服务器端调试
- 客户端脚本,用于显示来自其他网站的所有图像
- HTML/jQuery 客户端和 PHP 后端用于 Twitter oAuth
- 为什么我可以使用 FileSystemObjects 来读取和写入客户端二进制文件,而不能用于读取和发送到服务器
- SOAP 客户端仅适用于 Google Chrome
- AWS 服务器端临时凭证是否可用于客户端 S3 上传
- JS框架,用于客户端与rest api通信
- 跨浏览器,用于客户端应用程序的对象持久性库
- 我应该使用哪个JavaScript库用于客户端连字符
- 网格中的Page_validators用于客户端验证
- Javascript -如何保护用于客户端加密的密钥
- 用于客户端日志记录的脚本或工具
- 不能使用CoffeeScript在meteor中创建仅用于客户端的集合