当前位置: 首页 > 知识库问答 >
问题:

Google Drive API(.NET)-将所有权从服务帐户转移到域用户

许俊贤
2023-03-14

我正在谷歌驱动器上创建文件与服务帐户。NET客户端API。

    string[] scopes = new string[] { DriveService.Scope.Drive };
    GoogleCredential credential;
    using (var stream = new FileStream(Directory.GetCurrentDirectory() + "/Resources/GoogleCredentials.json", FileMode.Open, FileAccess.Read))
    {
        credential = GoogleCredential.FromStream(stream).CreateScoped(scopes);
    }
    DriveService drive = new DriveService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
    });

我成功地创建了文件,

    var f = drive.Files;
    var request = f.Create(new Google.Apis.Drive.v3.Data.File()
    {
        Name = "Test from ASP.NET Core",
        AppProperties = prop,
        MimeType = "application/vnd.google-apps.document"
    });
    var file = await request.ExecuteAsync();

与所有域共享,但我不能将所有权转移到一个域用户

    Permission permission = new Permission()
    {
        EmailAddress = "user@example.com",
        Type = "user",
        Domain = "example.com",
        Role = "owner"
    };
    var requestpermission = drive.Permissions.Create(permission, file.Id);
    requestpermission.TransferOwnership = true;
    var perm = await requestpermission.ExecuteAsync();

我得到错误:

共有1个答案

令狐增
2023-03-14

所有权转移只能在同一域的用户之间进行,服务帐户不属于任何域。您最好的选择可能是创建一个服务帐户可以访问的团队驱动器,并执行两个阶段的过程:

  1. 使用服务帐户将文件移动到团队驱动器中。files.update,将addparaments参数设置为团队驱动器ID。
  2. 使用域用户将文件移出团队驱动器。files.update,将addparents参数设置为root(或某个目标文件夹的ID),并将removeparents参数设置为团队驱动器ID。
 类似资料:
  • 当试图转移所有权时,我得到以下错误: 下面是我的代码: 该文件夹已成功上传到共享文件夹中的Google Drive(所有者为'email@gmail.com',服务帐户为'editor'),但上传文件的所有者为服务帐户,编辑器为'email@gmail.com'。

  • 我将私有存储库的所有权转移到了一个不同的GitHub帐户。存储库仍然是私有的。当我试图将更改从本地repo推到新的远程存储库时,它会给我带来致命的后果:错误。我已经更改了url、用户名和用户电子邮件。我能做些什么来解决这个问题呢?

  • 我在AWS云服务中设置了一个项目。在那里我使用了EC2实例、AMI、弹性IP、互联网门路、NACL、路由表、安全组、自定义VPC、私有和公共子网、弹性负载平衡、自动伸缩、启动配置、KMS-key、Lambda、RDS Aurora实例、S3桶、简单电子邮件服务、简单队列服务、简单通知服务、云观察日志。现在我的客户要求将所有服务从现有的AWS帐户迁移到新的AWS帐户。

  • 由于permissions API调用不返回所有者的电子邮件和名称,所以我无法通过编程方式查看文件列表并转移所有权。我希望不必添加数据库来查找姓名和电子邮件,并将其与供应API绑定在一起。 谢谢你的任何建议。

  • 文档建议将服务帐户添加到GApps的第三方oauth访问列表必须由域管理员手动完成:https://developers.google.com/drive/delegation#delegate_domain-wide_authority_to_your_service_account 有没有一种方法可以通过身份验证页面来实现这一点?