AWS Cognito React Native Webview 身份验证
AWS Cognito React Native Webview Auth
在我的 React 本机应用程序中,我想将用户的 AWS cognito 凭证传递到应用程序内的 WebView,以便它可用于访问存储在私有 S3 存储桶中的文件。
所以基本上我有以下工作:
- 登录 Cognito(通过 aws-amplify 的 Auth class)
- S3 存储桶的安全性仅允许登录用户访问其内容。
我已经尝试将 headers 发送到 Webview
<WebView
source={{
uri: source,
headers: {
Authorization:
"AWS4-HMAC-SHA256 …”
}
}}
但这似乎不起作用。有人知道怎么做吗?
好的,在向 AWS 企业支持团队成员发送了多封电子邮件,以及许多小时的纠缠之后;我发现 S3 目前不支持传递来自 Cognito 的凭据。
我们能做的是:
将CloudFront放在S3前面,使用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
});
希望对大家有所帮助
在我的 React 本机应用程序中,我想将用户的 AWS cognito 凭证传递到应用程序内的 WebView,以便它可用于访问存储在私有 S3 存储桶中的文件。
所以基本上我有以下工作: - 登录 Cognito(通过 aws-amplify 的 Auth class) - S3 存储桶的安全性仅允许登录用户访问其内容。
我已经尝试将 headers 发送到 Webview
<WebView
source={{
uri: source,
headers: {
Authorization:
"AWS4-HMAC-SHA256 …”
}
}}
但这似乎不起作用。有人知道怎么做吗?
好的,在向 AWS 企业支持团队成员发送了多封电子邮件,以及许多小时的纠缠之后;我发现 S3 目前不支持传递来自 Cognito 的凭据。
我们能做的是:
将CloudFront放在S3前面,使用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
});
希望对大家有所帮助