转移Google Drive文件的所有权

本文关键字:所有权 文件 Drive Google 转移 | 更新日期: 2023-09-27 18:17:19

我们在c#中开发应用程序,需要在未经原始所有者许可的情况下将与curtain域相关的所有Google Drive文档的所有权转移给单个特定用户。我们正在使用Google Apps商业帐户的试用版。

原则上,我们需要这样做:http://screencast.com/t/effVWLxL0Mr4但是在c#代码中。

根据文档,它在OAuth2中作为超级管理功能实现。https://support.google.com/a/answer/1247799?hl=en(1)。但是文档被弃用了,而且我们没有找到任何API调用来做到这一点。

使用项目创建者的帐户,显示他不能访问所有文件,也不能看到未与他共享的文件。

在Google管理控制台管理API客户端访问,我们增加了访问权限,他访问文件没有权限到文件没有权限。链接:screencast.com/t/zU9cc6Psyb。我们根据文档链接:trovepromo-tf.trove-stg.com/0m1-sds/support.google.com/a/answer/162106?hl=en在那里添加了路由访问路由,然后重试。It doesn ' t work out…

此外,我们发现我们需要使用服务帐户来访问域的所有用户的所有数据,因此我们在创建的项目中为服务帐户link: screencast.com/t/rNKuz6zchwV生成API密钥,并使用以下代码在应用程序中进行身份验证:

var certificate = new X509Certificate2(@"C:'Temp'key.p12", "notasecret", X509KeyStorageFlags.Exportable);
        ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer("Service account email")
           {
               User= "admin@domain.com",
               Scopes = new[] { DriveService.Scope.Drive }
           }.FromCertificate(certificate));

但是当我们尝试获取文件夹列表时,我们得到错误:" access_denied ", Description: "Requested client not authorized.", Uri:""

请帮助我们通过服务帐户将一个用户的所有权转移到另一个用户!

2014-08-13更新:

亲爱的,似乎我在用户个性化方面有问题。
1)当我代表用户使用api连接时。在身份验证期间,它重定向到浏览器并请求许可。在这一切都完全好了,我可以操纵文件夹除了一件事:我不能转移所有权给他2)当我使用没有个性化的服务帐户时,身份验证看起来如下:

ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(ServiceAccountId)
           {
               Scopes = new[] { DriveService.Scope.Drive, 
                                          DriveService.Scope.DriveAppdata,
                                          DriveService.Scope.DriveFile, 
                                          DriveService.Scope.DriveScripts,
                                          DirectoryService.Scope.AdminDirectoryUser,
                                          DirectoryService.Scope.AdminDirectoryGroup,
                                          DirectoryService.Scope.AdminDirectoryOrgunit,
                                          DirectoryService.Scope.AdminDirectoryUserReadonly 
                },

           }.FromCertificate(certificate));

我可以访问共享到服务帐户的所有文件,但(再次)我不能转让权利。

3)然后我尝试通过向用户添加sypeadministrator电子邮件帐户来个性化服务帐户user = myaddress@mydomain.com

ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(ServiceAccountId)
           {
               Scopes = new[] { DriveService.Scope.Drive, 
                                          DriveService.Scope.DriveAppdata,
                                          DriveService.Scope.DriveFile, 
                                          DriveService.Scope.DriveScripts,
                                          DirectoryService.Scope.AdminDirectoryUser,
                                          DirectoryService.Scope.AdminDirectoryGroup,
                                          DirectoryService.Scope.AdminDirectoryOrgunit,
                                          DirectoryService.Scope.AdminDirectoryUserReadonly 
                },
             User = AdminEmail,
           }.FromCertificate(certificate));

然后我有错误:"access_denied",描述:"请求的客户端未被授权",Uri:"

如何正确地个性化服务帐户?

更新

13-08-2014

我们发现用于身份验证的基本api在这里:https://developers.google.com/accounts/docs/OAuth2ServiceAccount#creatingjwt

通常,我之前展示的都是协议的。net实现。

我们如何在。net代码中实现用户的个性化?我们没有找到任何可行的。net实现。

转移Google Drive文件的所有权

我终于找到了答案。

我可以使用以下结构来模拟一个帐户:

感谢所有试图帮助我的人!
        var initializer = new ServiceAccountCredential.Initializer(ServiceAccountId)
        {
            Scopes = scope,
            User = AdminEmail1
        };
        var credential = new ServiceAccountCredential(initializer.FromCertificate(certificate));
        var driveService = new DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = ApplicationName
        });