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

标签 c# google-api google-drive-api service-accounts google-workspace

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

这个想法是在 .NET 后端应用程序中使用服务帐户向公司员工共享的 Team Drive 上传/下载文件。例如,公司有其 company.com 域并在 Google 提供 name.surname@company.com 用户帐户。还为员工提供了 Team Drive。其中一个帐户(不是管理员)用于创建服务帐户,目前已完成以下步骤:

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

我在文档中找不到任何关于如何授予服务帐户访问团队云端硬盘的内容,以便所有有权访问团队云端硬盘的用户都可以看到所有上传的文件/文件夹。非常感谢任何关于如何做到这一点的有用链接。

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

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

最佳答案

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

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

  • 登录 Google 管理员并转到应用程序 -> 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);
    }
}

关于 Fields 参数语法的更多信息 here

关于c# - 如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43243865/

相关文章:

c# - 减少向三个表发送信息所需的 SqlCommand 数量

c# - 如何从文本文件表单中验证用户名和密码

php - 谷歌 API 客户端 :"{ "错误“: "invalid_grant", "error_description": "Incorrect token type."}”

c# - 更改 Google 默认身份验证重定向 - C#(Google 库)

android - 将 Google Drive 集成到 Android 应用程序中, Unresolved 导入

Android Intent 将文本/纯数据共享到 Google 云端硬盘

c# - 如何绘制迭代 ul-li 列表模式?

c# - 根据角色确定用户是否有权访问给定的 Controller 操作

javascript - 使用 nodejs google calendar API 插入事件返回 400 : "Missing end time"

file-upload - 将远程文件上传到谷歌驱动器