【问题标题】:AWS S3 js SDK: Access to XMLHttpRequest at from origin has been blocked by CORS policyAWS S3 js SDK:从源访问 XMLHttpRequest 已被 CORS 策略阻止
【发布时间】:2020-04-11 06:03:07
【问题描述】:

我正在尝试在我的 ASP.NET Core 3 Web 应用程序中使用 AWS js SDK 来访问客户端上的 s3 存储桶,但它不起作用。

  1. 我创建了一个存储桶并向其中添加了以下 CORS 配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>HEAD</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <ExposeHeader>ETag</ExposeHeader>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    </CORSConfiguration>
    
  2. 我创建了一个新的 IAM 用户,该用户具有 AmazonS3FullAccess 权限以及 AccessKey 和 Secret。

  3. 我添加了一个简单的视图来验证它与以下脚本部分:

    <script src="/lib/aws/aws-sdk-2.592.0.js"></script>
    <script language="javascript">
        $(function() {
    
            AWS.config.update({
                region: 'eu-west-2',
                credentials: new AWS.Credentials('<key>', '<secret>')
            });
    
            var s3 = new AWS.S3({
                apiVersion: '2006-03-01',
                params: { Bucket: '<bucket>' }
            });
    
            s3.listObjectsV2(function(err, data) {
                    if (err) console.log(err, err.stack);
                    else {
                        data.Contents.forEach(function(element) {
                            var row = "<tr>" + 
                                    "<td>" + element.Key + "</td>" + 
                                    "<td>" + element.LastModified + "</td>" + 
                                    "<td>" + element.Etag + "</td>" + 
                                    "<td>" + element.Size + "</td>" + 
                                    "<td>" + element.StorageClass + "</td>" + 
                                    "</tr>"
                            $('#objects-list-table tbody').append(row);
                        });
                    }
                });
        });
    </script>
    

而且我在浏览器控制台中不断收到以下错误,例如没有为存储桶配置 CORS:

Access to XMLHttpRequest at 'https://<bucket>.s3.eu-west-2.amazonaws.com/?list-type=2' from origin 'https://localhost:5001' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Access to XMLHttpRequest at 'https://<bucket>.s3.amazonaws.com/?max-keys=0' from origin 'https://localhost:5001' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

我的配置有什么问题?如何让它发挥作用?

【问题讨论】:

    标签: javascript amazon-web-services amazon-s3


    【解决方案1】:

    刚刚使用 HTTP Toolkit 欺骗了所有 HTTP 请求,发现该区域不正确。 如果有人遇到同样的问题并且 CORS 配置似乎正确 - 请检查区域。

    就我而言,法兰克福服务器不是 eu-west-2,而是 eu-central-1

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 2021-01-14
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 2021-10-20
      • 2021-03-08
      • 2021-10-27
      • 2021-03-27
      相关资源
      最近更新 更多