【问题标题】:Google Drive API (.NET) - Transfer ownership from Service Account to Domain userGoogle Drive API (.NET) - 将所有权从服务帐户转移到域用户
【发布时间】:2017-03-12 17:33:46
【问题描述】:

我正在使用 .NET client API 和服务帐户在 Google 驱动器上创建文件。

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

我得到错误:

指定的域无效或不适用于给定的域 权限类型。

我找到了this link,但不建议使用 p12 证书文件。所以我想使用 JSON。

【问题讨论】:

    标签: c# google-api google-drive-api google-api-dotnet-client service-accounts


    【解决方案1】:

    所有权转移只能在同一域中的用户之间进行,服务帐号不属于任何域。您最好的选择可能是创建服务帐户有权访问的团队云端硬盘,然后执行两阶段流程:

    1. 使用服务帐户将文件移动到团队驱动器中。 Files.update 将 addParents 参数设置为 Team Drive ID。
    2. 使用域用户将文件移出团队驱动器。 Files.update,addParents 参数设置为 root(或某个目标文件夹的 ID),removeParents 参数设置为团队驱动器 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2020-04-02
      • 1970-01-01
      • 2015-12-22
      相关资源
      最近更新 更多