在我的React Native应用程序中,我想将用户的AWS Cognito凭证传递到应用程序内的WebView,以便可以使用它来访问存储在私有S3存储桶中的文件。
所以基本上我有以下工作: -登录到Cognito(通过aws-amplify的Auth类) -S3存储桶上的安全性仅允许已登录的用户访问其内容。
我尝试将标头发送到Webview
<WebView
source={{
uri: source,
headers: {
Authorization:
"AWS4-HMAC-SHA256 …”
}
}}
但这似乎不起作用。有谁知道该怎么做?
答案 0 :(得分:0)
好吧,在收到许多给AWS企业支持团队成员的电子邮件以及数小时的拔头发之后;我发现S3当前不支持从Cognito传递凭据。
我们可以做的是:
在S3前面放置 CloudFront ,然后使用Origin Access Identity (OAI)保护数据。这样可以很好地保证访问的安全性,但是不允许我将凭据传递给S3。这是因为CloudFront和S3之间的通信现在通过了OAI,这意味着所有用户都拥有一个单一的身份。
对您需要访问的每个S3访问URL进行签名。
我使用了后者,因为我需要限制用户访问。用于签名我使用的URL的代码是:
在本机反应中:
import AWS, { Auth, Storage } from "aws-amplify";
Storage.get("image.jpg").then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
在node.js中:
import AWS from "aws-sdk";
AWS.config.update({ accessKeyId, secretAccessKey, region });
const s3 = new AWS.S3();
s3.getSignedUrl("getObject", {
Bucket: "s3-bucket-name",
Key: "my/path/image.jpg",
Expires: 60 * 5 * 1000, // 5 Minutes
});
我希望它可以帮助其他人。