2015-02-06 93 views
0

我试图通过Google提供的.NET客户端库将我们的代码迁移到Admin SDK目录API中(很快将被弃用)Google Provisioning API。 。Google Admin SDK目录API - 从不同域名获取团体

在旧配置API(通过.NET客户端库)的调用来获得某个域的组很简单:

Google.GData.Apps.AppsService apps = new Google.GData.Apps.AppsService(AppDomain, DomainAdminEmail, AdminPassword); 
Google.GData.Apps.Groups.GroupsService service = apps.Groups; 
AppsExtendedFeed appsFeed = service.RetrieveAllGroups(); 

不完全是火箭科学,唯一需要的凭据域,域的管理员电子邮件和管理员密码。只要你可以提供这三个参数,你就可以得到任何域的组。

我一直在尝试两天,使用新的Admin SDK目录API(通过新的.NET客户端库)创建一个等效的调用,它给我一个非常困难的时间。我能够完全实现它的唯一方法是为与域的管理员电子邮件相关联的项目创建一个服务帐户,包括根据mwpreston的有用post生成私钥文件):

//Create security certificate using private key file and password. 
var certificate = new X509Certificate2(pathToPrivateKeyFile, privateKeyPassword, X509KeyStorageFlags.Exportable); 

//Create a service credential using the certificate, admin email and API scopes. 
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail) 
{ 
    User = adminUserEmail, 
    Scopes = scopes 
}.FromCertificate(certificate)); 

//Create Directory Service using the service credential and the application name. 
var dirservice = new DirectoryService(new BaseClientService.Initializer() 
{ 
    HttpClientInitializer = credential, 
    ApplicationName = applicationName 
}); 

var groupsListRequest = dirservice.Groups.List(); 
groupsListRequest.Domain = domain; 
domainGroups = groupsListRequest.Execute(); 

然而,因为服务帐户与特定域相关联(如管理员的电子邮件帐户服务帐户中指定)它只能被用于请求群组从该特定域。

我们有成千上万个不同域的客户。为每个客户的域(以及私钥文件)创建一个新的服务帐户是不切实际的。

我搜索和搜索的方式调用DirectoryService的方式使用相同的参数(域,管理员电子邮件和密码),但我找不到任何东西。 Admin API .NET客户端库的文档非常稀疏,没有任何帮助。

供应API将于2015年4月20日弃用,因此其他人一定会遇到此问题。谁能帮忙?

回答

0

您应该在构建凭证时使用“impersonate”(通过.setServiceAccountUser(“[email protected]”))。寻找例子here

+0

不幸的是,这并不能解决我的问题。我需要能够请求来自多个_different_域的组(以及组的成员)。原始API允许我使用域名,管理员电子邮件和密码进行呼叫;新API似乎坚持我为每个域使用特定的服务帐户。这是不切实际的,因为我们的客户拥有数千个域名。 – 2015-02-08 16:45:50

+0

也许我只是不明白你的问题,但在我的应用程序中,我还通过构建一个凭证对象(除了serviceAccountUser - 目标域管理员之外,它仍然是相同的),通过一个服务帐户访问不同域的目录信息,然后传递给目录API构造函数/建设者,你可以在下面的代码看看... – user3686724 2015-02-08 22:49:10

+0

GoogleCredential.Builder BGC =新GoogleCredential.Builder() \t \t \t .setTransport(T) \t \t \t。setJsonFactory(jsonFactory) \t \t \t .setServiceAccountScopes(范围) \t \t \t .setServiceAccountPrivateKey(serviceAccountPrivateKey) \t \t \t .setServiceAccountId(Config.SERVICE_ACCOUNT_ID) .setServiceAccountUser(serviceAccountUser); (gc.getTransport(),gc.getJsonFactory(),null).setHttpRequestInitializer(gc).build(); – user3686724 2015-02-08 22:49:45

相关问题