通过服务帐户访问Google云端硬盘文件

时间:2019-07-15 16:38:04

标签: java sdk google-drive-api service-accounts

存储在用户Google Drive中的文件的典型用例是能够有选择地为某些其他用户授予访问权限,例如为了允许第三方读取或修改他们最初无权访问的文件。

当涉及到service account时,显然无法访问“根”级文件,因此所有要共享的文件都必须放在一个文件夹中,该文件夹通过电子邮件地址共享service account中的一个。

  • 是否有解决方法,以便在涉及服务帐户时访问“根”文件?

即使对于共享文件夹中的文件,Java SDK似乎也不允许在没有先与该用户共享文件的情况下更改用户的角色(这违背了使用SDK的目的)。

例如,以下代码不适用于具有特定fileId的任何文件和具有userEmail地址的第三方用户(非共享):

Persmission permission = new Permission()
  .setType("user")
  .setRole("writer")
  .setEmailAddress(userEmail);

driveService
  .permissions()
  .create(fileId, permission)
  .setFields("*")
  .execute();

返回的错误是Google Drive的{​​{3}}中描述的错误:

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "appNotAuthorizedToFile",
        "message": "The user has not granted the app {appId} {verb} access to the file {fileId}."
      }
    ],
    "code": 403,
    "message": "The user has not granted the app {appId} {verb} access to the file {fileId}."
  }
}

在这种情况下,{verb}"write"

上面使用的service account包含在Authorized API clients门户网站Manage API client access页面的Google Admin部分的https://www.googleapis.com/auth/drive 部分中,范围尽可能广泛,即使用

{{1}}
  • 是否有任何方法(如果不是以上方法)(给定了fileId和userEmail)将随机用户作为共享实体添加到Google云端硬盘文件中?

0 个答案:

没有答案