3

我成功地使用服务帐户获得域范围的权限来访问用户的驱动器文件和日历,如下所示:

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,
});

但是,我并不完全确定更改用户的最佳方式,尤其是当我同时与许多用户打交道时。是否最好重新开始并为每个用户创建一个新的初始化程序和服务?或者是否可以保持相同的服务并只更新被模仿的用户?

4

1 回答 1

3

ServiceAccountCredential 的设计方式是线程安全的,因此您无法更改用户数据。但是,我们可以将当前的 getter 属性 User 更改为类似的Token(以我们获取和设置它时的样子)。请随时在我们的问题跟踪器中打开一个新问题并详细说明。

现在,您应该为每个“用户”使用新服务,如下所示:

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,
});
于 2013-11-11T20:35:55.657 回答