Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AWS SDK for JavaScript访问AWS S3_Javascript_Amazon Web Services_Amazon S3 - Fatal编程技术网

使用AWS SDK for JavaScript访问AWS S3

使用AWS SDK for JavaScript访问AWS S3,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,现在我正在使用javascript SDK访问我的s3 bucket,它工作正常,但是我已经直接在javascript中硬编码了我的所有凭据,但是在SDK中,他们说你可以将这些存储在AWS.config对象中,我不知道如何做。另外,在线资源没有提供信息,所以请有人告诉我如何做,或者其他更好的方法来做,而不是硬编码的凭据 <script type="text/javascript"> AWS.config.accessKeyId = 'dddddddddd';

现在我正在使用javascript SDK访问我的s3 bucket,它工作正常,但是我已经直接在javascript中硬编码了我的所有凭据,但是在SDK中,他们说你可以将这些存储在AWS.config对象中,我不知道如何做。另外,在线资源没有提供信息,所以请有人告诉我如何做,或者其他更好的方法来做,而不是硬编码的凭据

    <script type="text/javascript">
        AWS.config.accessKeyId = 'dddddddddd';
        AWS.config.secretAccessKey = 'rrrrrrrrrrrrrrrreeeeeeeeeeeeeeeeeeeee';
        AWS.config.region = 'us-east-1';

        // create the AWS.Request object
        var bucket = new AWS.S3({ params: { Bucket: 'some.bucket' } });
        bucket.listObjects(function (err, data) {
            if (err) {
                document.getElementById('status').innerHTML =
                  'Could not load objects from S3';
            } else {
                document.getElementById('status').innerHTML =
                  'Loaded ' + data.Contents.length + ' items from S3';
                for (var i = 0; i < data.Contents.length; i++) {
                    document.getElementById('objects').innerHTML +=
                      '<li>' + data.Contents[i].Key + '</li>';
                }
            }
        });
    </script>

AWS.config.accessKeyId='dddddddddd';
AWS.config.secretAccessKey='rrrrrrrrrrrrrrrreeeeeeeeee';
AWS.config.region='us-east-1';
//创建AWS.Request对象
var bucket=new AWS.S3({params:{bucket:'some.bucket'}});
bucket.listObjects(函数(错误、数据){
如果(错误){
document.getElementById('status').innerHTML=
'无法从S3加载对象';
}否则{
document.getElementById('status').innerHTML=
'已加载'+data.Contents.length+'来自S3'的项目;
对于(var i=0;i”+data.Contents[i].Key+”;
}
}
});

我认为浏览器不支持此功能。node.js完全支持AWS Javascript SDK

请阅读以下内容:

这有点道理,因为没有人愿意公开私有身份验证/授权信息

如果你想变得更花哨,你可以使用JSONP从另一台服务器()传递凭证,并使用防火墙限制对某些客户端的访问,但这可能会有点混乱



另一方面,既然浏览器上的javascript是公开的,为什么不公开S3 bucket进行读取访问呢?

有一种方法可以在浏览器中实现JS上传,而不暴露您的私人凭据。但是,它确实需要一些服务器端逻辑


请参见此处的答案:

我认为更好的方法是将其存储在~/.aws/credentials中。您可以通过创建文件或使用cli命令使用aws configure来完成此操作,回答问题后,它将生成此文件:

[default]
aws_access_key_id = THEACCESSKEYHERE
aws_secret_access_key = THESECRETACCESSKEYHERE
和~/.aws/config:

[default]
output = json (or whatever you prefer here)
region = us-east-1 (or whatever region you are using)

这可以在不必为您需要的AWS的每个命令或调用手动添加它的情况下工作。

您在javascript中添加了什么,以便从.AWS/credentials文件加载它们?@Dtor
console.log(process.env.AWS\u secret\u access\u key)
AWS不包含很多公共身份验证/授权信息吗?(参见CognitoSDK示例)。我的理解是,如果我错了,请纠正我,授权可以基于每个身份,并且为附加到IAM角色的登录生成会话密钥,并且系统“足够安全”,因为这些密钥通过HTTPS传递、锁定到域并过期。而且。。可以开启完美的前向保密功能。因此,
身份访问密钥
可以来自身份池登录,而不必是bucket的实际
管理员访问密钥
。有意义吗?对于仍然访问此站点的任何人,
accessKeyId
secretaccesskey
都是不推荐的。我选择使用这种方法: