我正在开发一个操作Google云端存储数据的应用程序 用户拥有的桶。我想设置它,以便用户可以安排 为了这个目的,只允许应用程序访问他或她的一个桶 如果应用程序以某种方式运行失败(或者它是 被一个坏演员或其他人冒充。)
但是我对GCS授权的文档感到有些困惑。
OAuth 2.0 authentication上的文档显示只有三个
范围的选择:read-only
,read-write
和full-control
。做这个
意味着我想要的是不可能的,如果我授予读/写权限
我正在授予读取/写入所有存储桶的权限吗?
让我感到特别困惑的是,我不明白这一切是如何发挥作用的 与GCS的项目概念。好像我必须要创建一个项目 我的应用程序的客户端ID,N个用户还必须为其创建N个项目 他们的水桶。但那似乎并不重要 - 来自项目的客户端ID A可以从项目B访问存储桶。实际上什么是项目ID?
所以我的问题总结如下:
我可以将已安装的应用请求设置为仅适用于a的访问令牌 单桶?
如果没有,开发人员和/或细心的用户是否有其他方式 通常限制访问?
如果我不能这样做,则意味着访问令牌具有严重的安全性 影响。但我不想要求用户生成新的用户 每次他们运行应用程序。缓存令牌的典型故事是什么?
项目ID究竟是什么?它们与任何授权相关吗? 方式是什么?
答案 0 :(得分:3)
我和你有同样的问题。
转到:https://console.developers.google.com
* =服务帐户的电子邮件。 xxxxxxxxxxxx-xxxxxxxxx@developer.gserviceaccount.com
答案 1 :(得分:0)
如果您正在构建应用。它是服务器OAuth的服务器。 https://developers.google.com/accounts/docs/OAuth2ServiceAccount
"您是否可以更清楚地了解我在哪个项目上创建客户端ID(拥有已安装应用程序的开发人员项目,或拥有该应用程序的用户的项目) )"
拥有该存储桶的用户项目 用户拥有授予访问权限的存储桶。
答案 2 :(得分:0)
如果我想这样做,我发现我使用了错误的OAuth流程。感谢Euca 为了解决这个问题的灵感。
当我问这个问题时,我假设有多个项目 参与Google Developers Console:
我的一个项目,即开发人员,包含生成的凭据 一个"已安装的应用程序",其中包含客户端ID和(假设)秘密 我的源代码。
我的每个用户都有一个项目,拥有并为一个存储桶付费 他们正在使用该应用程序访问。
而不是使用"已安装的应用程序"凭据,我所做的是切换到 "服务帐户"凭据,由用户在拥有的项目中生成 他们的水桶。这允许他们创建和下载他们的JSON密钥文件 可以提供给我的应用程序,然后使用OAuth的JSON Web令牌流程 2.0(又名"两条腿OAuth")获得授权。这样做的好处是:
我不再需要拥有自己的项目,这很奇怪 疣在这个过程中。
默认情况下,服务帐户凭据允许我的应用程序访问 只有生成它们的项目拥有的存储桶。如果 用户有其他项目与其他存储桶,应用程序无法访问它们。
但是,服务帐户有一个"电子邮件地址"就像任何其他用户一样 可以添加到任何存储桶的ACL中,无论项目是什么,授予 访问该桶。
答案 3 :(得分:0)
关于你的答案。
很高兴你解决了你的问题。
您还可以减少对一个专业水桶的访问权限。例如,如果您有多个存储桶,并且应用程序不需要访问所有存储桶。 默认情况下,服务帐户具有所有存储桶的完全访问读取,写入和ACL。我通常只限于所需的桶。