使用令牌的Google云端硬盘授权 - 服务器到服务器授权无法删除其他用户文件(同一域)

时间:2016-09-19 07:20:48

标签: google-drive-api service-accounts

我正在使用服务器进行服务器授权,如下所述: Oauth 2 Service Account

我有用户U1和U2,两者都在同一个域中。 当我使用API​​ V2(试过V3和相同的效果)我无法删除U2s文件,我得到403.我们有相同的共享目录。 但是,当我通过网页登录时,这确实有效。 其他请求,如文件列表或下载工作。

我使用

获取令牌

credentials = SignedJwtAssertionCredentials(client_email, bytes(private_key, 'UTF-8'), 'https://www.googleapis.com/auth/drive', sub=U1@MyDomain.com)

有人知道为什么它可以在网页上运行而不是API吗? 提前谢谢

修改 我得到的错误是:

{ "error": { "errors": [ { "domain": "global", "reason": "forbidden", "message": "Insufficient permissions for this file", "locationType": "other", "location": "file.permissions" } ], "code": 403, "message": "Insufficient permissions for this file" } }

当我以用户身份登录时,我看到了文件权限: enter image description here

如果第一个用户是所有者(U1),则第二个用户(U2)具有编辑权限,第三个用户是一般组(U1,U2被分配并拥有两个编辑权限),最后一个是只是一个可以阅读的用户。

1 个答案:

答案 0 :(得分:0)

您正在作为服务帐户进行身份验证。将服务帐户视为虚拟用户。它有自己的谷歌驱动器帐户,谷歌日历帐户,可能还有更多。谷歌驱动器控制私人用户数据,U1拥有他的文件U2拥有他的文件。除非U1与U2共享文件,否则U1无法访问U2的文件。服务帐户也是如此。

"message": "Insufficient permissions for this file",

就是这个意思。服务帐户无权访问您尝试访问的文件。提供访问权限的最简单方法是获取服务帐户电子邮件地址,并通过Drive Web界面与服务帐户共享文件,就像使用任何其他用户一样。

注意:域名让我觉得您拥有其中一个Google域帐户,Google应用或工作或类似内容。我无法访问其中一个,因此我无法对此进行测试。但是,我读到您可以将该服务帐户添加为域中的用户,并授予其对所有用户文件的访问权限。 (疯狂的猜测我会看到我是否记得我读过它。)