我应该使用哪些凭据来允许用户直接上传到GCS?

时间:2017-06-16 00:58:14

标签: python google-app-engine google-cloud-storage

我正在GAE(python)中创建一个应用程序,允许用户(必须使用Google帐户登录)直接将文件上传到Google云端存储。上传将异步发生(一个按钮将执行一些javascript代码以发送带有文件的XHR PUT请求。)

我决定使用JSON API,我正在尝试进行分段上传。根据文档,我需要包含带有令牌的Authorization标头。我很想知道,因为我不需要访问用户帐户中的任何内容(比如日历或那种东西),实现这一目标的最佳方式是什么?

是否可以从应用程序默认凭据创建临时访问令牌,并将其发送到html文件中的用户,然后从js函数使用它?如果没有,我该怎么办?

1 个答案:

答案 0 :(得分:0)

您需要让用户向您授予谷歌云存储写入范围(我强烈建议任何谷歌云存储用户不授予任何随机应用程序)。您还需要授予最终用户对您的存储桶的写入权限(这也意味着他们可以删除存储桶中的所有内容)。除非您事先了解所有最终用户,否则这意味着您需要将存储桶公开写入..我怀疑这是您想要做的事情。

我强烈建议您使用委托访问您的服务帐户,但不幸的是,JSON api目前不支持任何形式的身份验证委派。但是,XML API确实支持签名URL。

https://cloud.google.com/storage/docs/access-control/signed-urls

您只需将它用于客户端上传,其他所有内容都可以使用JSON API。

有三种选择:

  1. 只需签署一个简单的PUT请求
  2. https://cloud.google.com/storage/docs/xml-api/put-object-upload#query_string_parameters

    1. 使用表格POST并签署政策文件
    2. https://cloud.google.com/storage/docs/xml-api/post-object#policydocument

      1. 启动可恢复的上传服务器端,并将上传URL传递回客户端。如果能够恢复上传很重要(例如大型上传),我只推荐此选项。
      2. https://cloud.google.com/storage/docs/access-control/signed-urls#signing-resumable