【问题标题】:AWS Cognito React Native Webview AuthAWS Cognito React Native Webview 身份验证
【发布时间】:2020-01-30 03:26:11
【问题描述】:

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

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

我已尝试将标头发送到 Webview

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

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

【问题讨论】:

  • 您的应用在 EC2 实例上?
  • 不,在移动设备上。这是一个 React Native 应用程序,它想要访问 WebView 中的 S3 文件。

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


【解决方案1】:

好的,在向 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
});

我希望它可以帮助别人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2016-06-25
    • 1970-01-01
    • 2017-01-02
    • 2018-05-22
    • 2016-12-22
    • 2022-01-26
    相关资源
    最近更新 更多