如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive

Posted

技术标签:

【中文标题】如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive【英文标题】:How to access Team Drive using service account with Google Drive .NET API v3 【发布时间】:2017-08-31 19:35:19 【问题描述】:

有谁知道应该进行哪些配置来授予 Google 服务帐户对已创建的团队云端硬盘的访问权限?

我们的想法是使用 .NET 后端应用程序中的服务帐户向团队云端硬盘上传/下载文件,这些文件在公司员工之间共享。例如,公司拥有其company.com 域并在Google 提供name.surname@company.com 用户帐户。还有一个员工的团队驱动器。其中一个帐户(不是管理员)用于创建服务帐户,目前已完成以下步骤:

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

我在文档中找不到任何关于如何授予服务帐户访问团队云端硬盘的信息,以便所有有权访问团队云端硬盘的用户都可以看到所有上传的文件/文件夹。非常感谢任何有关如何执行此操作的有用链接。

目前,当我使用服务帐户创建文件夹或上传文件时,它会将它们放在仅属于服务帐户的私有云端硬盘中。

可能有一种解决方法:将文件上传到服务帐户的私人驱动器并与用户共享(这不是要求的首选),但如果有人告诉我该怎么做,我会开心。

【问题讨论】:

我没有访问权限,所以无法提供更多帮助,然后将文档链接developers.google.com/drive/v3/web/… developers.google.com/admin-sdk/reports/v1/guides/delegation 您应该能够像添加任何其他用户一样添加服务帐户电子邮件地址。跨度> 这很有帮助,所以请将您的评论包含在答案中,以便我能够接受。 你为什么不用你找到的东西来回答这个问题。您可以使用我所做的只是向您展示文档 【参考方案1】:

除了问题中的步骤之外,以下是根据comment 中的文档授予访问权限的步骤。

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

登录 Google 管理员并转到 应用程序 -> Google G Suite -> 云端硬盘和文档 -> 共享设置 子菜单,然后从共享中选择 开启选项 点击管理团队云端硬盘子菜单,然后点击您要授予访问权限的团队云端硬盘 在会员访问权限弹出窗口中点击添加会员 输入服务帐号Account ID(email),选择访问级别(我选择Full),勾选Skip sent notification并点击SEND

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

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);
    

更多关于Fields参数语法here

【讨论】:

谢谢,按照项目符号列表操作,它现在对我有用。 ` $results = $driveService->teamdrives->listTeamdrives();` 现在显示我将我的服务帐户帐户 ID(电子邮件)添加为成员的 teamdrives。 只是一个注释。我无需以管理员身份登录 g 套件,而是通过以我自己的用户身份创建团队驱动器并仅通过电子邮件从正常的团队驱动器界面邀请服务帐户来做到这一点。只需像在 g Suite 中一样选中邀请中的“跳过发送通知”框即可。 就我而言,这是我自己的帐户,没有管理员角色。我用它来创建服务帐户,但 Team Drive 本身是由管理员创建的。无论如何,它是相同的invite_and_skip_notification 场景。 我尝试将服务帐户用户添加到团队云端硬盘,但得到“user@project.iam.gserviceaccount.com 不在公司内部。只有公司内部的人才能访问此团队云端硬盘中的文件。 "然后我发现developers.google.com/drive/api/v3/about-auth 有一个警告:“服务帐户可能无法获得额外的存储配额,也不能充当域成员。” 似乎他们想要做的是每当有人想在共享驱动器上创建文件或执行某些操作时,用户需要向您的应用程序提供他们的身份验证详细信息,以便应用程序获得与用户相同的权限。但这不是我的情况。用户可以访问应用程序,但不能访问存储。

以上是关于如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC C# Google Drive API 重定向不匹配 URI

如何使用 Google 服务帐户通过 Activity API 检索 Google Drive 活动?

如何通过 API 向 Google Drive 添加/创建/插入文件?

如何在Google Drive API上按文件夹获取文件列表

从 .NET WCF 服务将文件插入 Google Drive

如何通过 Google Drive 和 App Engine SDK 使用 Oauth2 服务帐户