C# 转移Google驱动器文档的所有权
我们在C#中开发应用程序,该应用程序需要在未经原始所有者许可的情况下将与窗帘域相关的所有Google Drive文档的所有权转移给单个特定用户。我们正在使用谷歌应用商业账户的试用版 原则上,我们需要这样做:但在C代码中 根据文档,它作为superadmin功能在OAuth2中实现。(1). 但该文档已被弃用,而且我们并没有找到任何API调用来实现这一点 使用项目创建者的帐户,他似乎无法访问所有文件,并且无法查看文件,并且没有与他共享 在Google管理控制台的manage API client access中,我们为他添加了访问权限,使他可以在未经许可的情况下访问文件。链接:。我们根据该文档链接在那里添加了路由访问路由:并重试。 它没有成功 此外,我们发现我们需要使用service account来访问域中所有用户的所有数据,因此我们在创建的项目中为service account link:生成API密钥,并在应用程序中使用以下代码进行身份验证:C# 转移Google驱动器文档的所有权,c#,.net,oauth-2.0,google-drive-api,oauth2client,C#,.net,Oauth 2.0,Google Drive Api,Oauth2client,我们在C#中开发应用程序,该应用程序需要在未经原始所有者许可的情况下将与窗帘域相关的所有Google Drive文档的所有权转移给单个特定用户。我们正在使用谷歌应用商业账户的试用版 原则上,我们需要这样做:但在C代码中 根据文档,它作为superadmin功能在OAuth2中实现。(1). 但该文档已被弃用,而且我们并没有找到任何API调用来实现这一点 使用项目创建者的帐户,他似乎无法访问所有文件,并且无法查看文件,并且没有与他共享 在Google管理控制台的manage API client
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));
但是,当我们试图获取文件夹列表时,会出现错误:“访问被拒绝”
”,说明:“请求的客户端未授权”,Uri:“
请帮助我们通过服务帐户将一个用户的所有权转移到另一个用户
从2014年8月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电子邮件帐户来模拟服务帐户=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));
然后出现错误:“访问被拒绝”,描述:“请求的客户端未授权”,Uri:“
如何正确模拟服务帐户
于2014年8月13日更新
我们发现用于身份验证的基本api如下:
通常,我之前展示的都是该协议的.net实现
如何在.net代码中模拟用户。我们没有找到任何有效的.net实现 我终于找到了答案 我可以使用以下结构模拟帐户: 感谢所有试图帮助我的人
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
});
当您试图获得访问权限时,请转到google页面进行用户身份验证。您看到了获得“驾驶”权限的选项吗?亲爱的,我无法回答您的问题,但我更新了我的问题。你能看一下2014年8月13日的更新吗。