我已成功使用服务帐户获取域范围的权限,以访问用户的驱动器文件和日历,如下所示:
ServiceAccountCredential.Initializer initializer =
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = serviceAccountScope,
User = "user1@myDomain.com"
}.FromCertificate(certificate);
ServiceAccountCredential credential = new ServiceAccountCredential(initializer);
service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = appName,
});
但是,我并不完全确定更改用户的最佳方式,特别是如果我一次与多个用户打交道。是否最好重新开始并为每个用户创建一个新的初始化程序和服务?或者是否可以保留相同的服务并只更新模仿用户?
答案 0 :(得分:3)
ServiceAccountCredential的设计方式是它的线程安全,因此您无法更改用户数据。但是,我们可能会将当前的getter属性User更改为类似Token(以我们获取和设置它时的方式)。请随时在我们的issue tracker中打开一个新问题并详细说明。
目前,您应该使用新服务并为每个“用户”使用,如下所示:
ServiceAccountCredential.Initializer initializer =
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = serviceAccountScope,
User = "user1@myDomain.com"
}.FromCertificate(certificate);
var service1 = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = new ServiceAccountCredential(initializer),
ApplicationName = appName,
});
initializer.User = "user2@myDomain.com"
var service2 = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = new ServiceAccountCredential(initializer),`
ApplicationName = appName,
});