如何使用带有Google Drive .NET API v3的服务帐户访问Team Drive

Ghu*_*kas 5 c# google-api google-drive-api service-accounts gsuite

有谁知道应该进行哪些配置才能向Google服务帐户授予对已创建的Team Drive的访问权限?

这个想法是在.NET后端应用程序中使用服务帐户向公司员工之间共享的Team Drive上载文件/从中下载文件。例如,公司有其company.com域,并name.surname@company.com在Google 提供用户帐户。此外,还有一个面向员工的团队精神。这些帐户之一(不是admin)用于创建服务帐户,到目前为止,这些步骤已完成:

  • 在Google Cloud Platform中为组织创建了一个项目
  • 启用的Google Drive API
  • 创建一个服务帐号
  • 为该服务帐户创建了一个密钥
  • 在IAM标签中分配了编辑者/所有者角色
  • 如此处所述使用G Suite管理员帐户为使用客户ID的服务帐户启用了G Suite域范围委派。

我在文档中找不到有关如何授予服务帐户对Team Drive的访问权限的任何提及,以便所有可以访问Team Drive的用户都可以看到所有上载的文件/文件夹。任何有关如何执行此操作的有用链接都非常感谢。

现在,当我使用服务帐户创建文件夹或上载文件时,会将它们放入仅属于该服务帐户的私有驱动器中。

可能有一种解决方法:将文件上传到服务帐户的专用驱动器并与用户共享(这不是要求的选择),但是,如果有人告诉您如何做到这一点,我仍然很高兴。

Ghu*_*kas 6

除了问题中的步骤以外,这是基于注释中的文档授予访问权限的步骤。

这些步骤需要具有“服务和应用程序”管理员角色的帐户。

  • 登录到Google管理员,然后转到“ 应用程序”->“ G Suite”->“驱动器和文档”->“共享设置”子菜单,然后从“共享”选项中选择“ 开启
  • 单击管理团队驱动器子菜单,然后单击您要授予访问权限的团队驱动器
  • 在“ 成员访问权限”弹出窗口中单击“ 添加成员
  • 输入服务帐户帐户ID(电子邮件),选择访问权限级别(我选择“完整”),检查“ 跳过发送”通知,然后单击“ 发送”

假设身份验证部分设置正确,下面是一个简单的代码,该代码可获取服务帐户的团队驱动器:

var teamDriveList = service.Teamdrives.List();

teamDriveList.Fields = "teamDrives(kind, id, name)";

var teamDrives = teamDriveList.Execute().TeamDrives;

if (teamDrives != null && teamDrives.Count > 0)
{
    foreach (var drive in teamDrives)
    {
        Console.WriteLine("{0} ({1})", drive.Name, drive.Id);
    }
}
Run Code Online (Sandbox Code Playgroud)

有关Fields参数语法的更多信息,请点击此处

  • 只是一个注释。我没有以管理员身份登录 g Suite,而是通过以我自己的用户身份创建团队驱动器并通过电子邮件从普通团队驱动器界面邀请服务帐户来实现此目的。只需像在 g Suite 中一样选中邀请中的“跳过发送通知”框即可。 (2认同)
  • 我尝试将服务帐户用户添加到团队云端硬盘,但收到“user@project.iam.gserviceaccount.com 不在公司范围内。只有公司内部人员才能访问此团队云端硬盘中的文件。” 然后我发现 https://developers.google.com/drive/api/v3/about-auth 有一个警告:“服务帐户可能不会获得额外的存储配额,也不会充当域的成员。” (2认同)