通过API密钥访问Google云存储桶中的对象

时间:2017-11-27 17:48:12

标签: google-cloud-storage

我正在尝试通过在网络浏览器中运行的Javascript访问Google云端存储桶中的内容。到目前为止,我已使用服务帐户凭据在服务器上创建了签名URL,并在REST调用期间将它们传递给客户端。我这样做的唯一原因是因为我之前试图解决这个问题,然后放弃并选择了签名的网址。现在我需要让它工作。

到目前为止,我已尝试使用服务帐户凭据在服务器上创建访问令牌,如下所示:

    credential = GoogleCredential.fromStream(this.getClass().getResourceAsStream("/serviceaccount.json"));
    LinkedList<String> list = new LinkedList<String>();
    list.add("https://www.googleapis.com/auth/devstorage.read_only");
    credential = credential.createScoped(list);
    credential.refreshToken();

然后我将“access_token”返回表单credential.getAccessToken()传递给客户端,并在XmlHttpRequest中使用它,如下所示:

    var xhr = new XMLHttpRequest();
    xhr.open('GET', "https://storage.googleapis.com/....." true);
    xhr.responseType = 'arraybuffer';
    xhr.setRequestHeader('Authorization', 'Bearer ' + access_token);

这会导致chrome产生以下错误。

“对预检请求的响应未通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头。”

斗上的人物是

[{“maxAgeSeconds”:3600,“method”:[“GET”,“HEAD”,“DELETE”],“origin”:[“http://www.voxxlr.com”],“responseHeader”:[“O rigin“,”Content-Type“,”Content-Length“]},{”maxAgeSeconds“:3600,”method“:[”GET“,”HEAD“,”DELETE“],”origin“:[”http ://voxxlr.com“],”responseHeader“:[”Origin“,”Content-Type“,”Content-Length“]}]

接下来,我尝试使用API​​密钥,如下所示:

    var xhr = new XMLHttpRequest();
    xhr.open('GET', "https://storage.googleapis.com/....?KEY=...." true);
    xhr.responseType = 'arraybuffer';

这产生了以下错误:

  

存取遭拒   匿名用户没有对voxxlr / 1511465797269 / n.bin的storage.objects.get访问权限。

API密钥不应该像这样提供访问权限吗?我并不是真的在寻找包含google / javascript客户端的解决方案,因为所需的唯一操作也是读取存储桶内容。不需要管理员或删除功能。我基本上只是在寻找一个解决方案,其中来自我的域的所有html / javascript都可以读取存储桶。

任何帮助都会受到赞赏......这已经耗费了大量时间,但似乎应该有一个简单的解决方案。

0 个答案:

没有答案