我正在尝试通过 Google 提供的 .NET 客户端库将使用(即将弃用的)Google Provisioning API 的代码迁移到 Admin SDK Directory API。
在旧的 Provisioning 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的有用帖子):
//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 客户端库的文档非常稀少,没有任何帮助。
Provisioning API 将于 2015 年 4 月 20 日弃用,因此肯定有人遇到过这个问题。任何人都可以帮忙吗?