AWS Cognito React本机Webview身份验证

时间:2019-09-30 20:01:59

标签: react-native amazon-s3 webview amazon-cognito

在我的React Native应用程序中,我想将用户的AWS Cognito凭证传递到应用程序内的WebView,以便可以使用它来访问存储在私有S3存储桶中的文件。

所以基本上我有以下工作: -登录到Cognito(通过aws-amplify的Auth类) -S3存储桶上的安全性仅允许已登录的用户访问其内容。

我尝试将标头发送到Webview

  <WebView 
        source={{
          uri: source,
          headers: {
            Authorization:
              "AWS4-HMAC-SHA256 …”
          }
        }}

但这似乎不起作用。有谁知道该怎么做?

1 个答案:

答案 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
});

我希望它可以帮助其他人。