如何在多个用户之间切换服务帐户

时间:2013-11-11 20:04:42

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

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

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

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

1 个答案:

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