Google云端存储:如何仅为一个存储桶授予已安装的应用程序访问权限?

时间:2015-02-13 03:56:15

标签: authorization google-cloud-storage google-cloud-platform

我正在开发一个操作Google云端存储数据的应用程序 用户拥有的桶。我想设置它,以便用户可以安排 为了这个目的,只允许应用程序访问他或她的一个桶 如果应用程序以某种方式运行失败(或者它是 被一个坏演员或其他人冒充。)

但是我对GCS授权的文档感到有些困惑。 OAuth 2.0 authentication上的文档显示只有三个 范围的选择:read-onlyread-writefull-control。做这个 意味着我想要的是不可能的,如果我授予读/写权限 我正在授予读取/写入所有存储桶的权限吗?

让我感到特别困惑的是,我不明白这一切是如何发挥作用的 与GCS的项目概念。好像我必须要创建一个项目 我的应用程序的客户端ID,N个用户还必须为其创建N个项目 他们的水桶。但那似乎并不重要 - 来自项目的客户端ID A可以从项目B访问存储桶。实际上什么是项目ID?

所以我的问题总结如下:

  1. 我可以将已安装的应用请求设置为仅适用于a的访问令牌 单桶?

  2. 如果没有,开发人员和/或细心的用户是否有其他方式 通常限制访问?

  3. 如果我不能这样做,则意味着访问令牌具有严重的安全性 影响。但我不想要求用户生成新的用户 每次他们运行应用程序。缓存令牌的典型故事是什么?

  4. 项目ID究竟是什么?它们与任何授权相关吗? 方式是什么?

  5. 我为这个散乱的问题道歉;它反映了似乎是什么 分散的文档给我。 (或者至少是没有的文件 面向已安装的应用程序用例。)

4 个答案:

答案 0 :(得分:3)

我和你有同样的问题。

转到:https://console.developers.google.com

  • 转到凭据并创建新的客户ID
  • 您必须删除"权限"中的电子邮件*你的项目。
  • 并在您的存储桶的ACL中手动添加。

* =服务帐户的电子邮件。 xxxxxxxxxxxx-xxxxxxxxx@developer.gserviceaccount.com

答案 1 :(得分:0)

如果您正在构建应用。它是服务器OAuth的服务器。 https://developers.google.com/accounts/docs/OAuth2ServiceAccount

"您是否可以更清楚地了解我在哪个项目上创建客户端ID(拥有已安装应用程序的开发人员项目,或拥有该应用程序的用户的项目) )"

  

拥有该存储桶的用户项目   用户拥有授予访问权限的存储桶。

答案 2 :(得分:0)

如果我想这样做,我发现我使用了错误的OAuth流程。感谢Euca 为了解决这个问题的灵感。

当我问这个问题时,我假设有多个项目 参与Google Developers Console:

  1. 我的一个项目,即开发人员,包含生成的凭据 一个"已安装的应用程序",其中包含客户端ID和(假设)秘密 我的源代码。

  2. 我的每个用户都有一个项目,拥有并为一个存储桶付费 他们正在使用该应用程序访问。

  3. 而不是使用"已安装的应用程序"凭据,我所做的是切换到 "服务帐户"凭据,由用户在拥有的项目中生成 他们的水桶。这允许他们创建和下载他们的JSON密钥文件 可以提供给我的应用程序,然后使用OAuth的JSON Web令牌流程 2.0(又名"两条腿OAuth")获得授权。这样做的好处是:

    • 我不再需要拥有自己的项目,这很奇怪 疣在这个过程中。

    • 默认情况下,服务帐户凭据允许我的应用程序访问 只有生成它们的项目拥有的存储桶。如果 用户有其他项目与其他存储桶,应用程序无法访问它们。

    • 但是,服务帐户有一个"电子邮件地址"就像任何其他用户一样 可以添加到任何存储桶的ACL中,无论项目是什么,授予 访问该桶。

答案 3 :(得分:0)

关于你的答案。

很高兴你解决了你的问题。

您还可以减少对一个专业水桶的访问权限。例如,如果您有多个存储桶,并且应用程序不需要访问所有存储桶。 默认情况下,服务帐户具有所有存储桶的完全访问读取,写入和ACL。我通常只限于所需的桶。