我尝试通过Google提供的.NET客户端库将我们的代码迁移到管理SDK目录API,以便使用(即将弃用)Google Provisioning 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();
不完全是火箭科学,所需的唯一凭据是域名,域名管理员电子邮件和管理员密码。只要您可以提供这三个参数,就可以获得任何域的组。
我已经尝试了两天使用新的管理SDK目录API(通过新的.NET客户端库)创建一个等效的调用,这给了我一个非常艰难的时间。我能够使其工作的唯一方法是为与域管理员电子邮件相关联的项目创建服务帐户,包括基于有用的私钥文件的生成post来自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日弃用,因此其他人必须面对此问题。有人可以帮忙吗?
答案 0 :(得分:0)
你应该使用"模仿" (通过.setServiceAccountUser(" user@example.com"))构建凭证。查看示例here。
答案 1 :(得分:0)
您可以在Google Developer Console上创建项目,然后生成刷新/访问令牌。这是链接 - https://developers.google.com/accounts/docs/OAuth2WebServer
我没有使用客户端库因此无法帮助您使用代码。您可以使用'list'API,它将为您提供客户所有域的所有组(如果您提供customerId) - https://developers.google.com/admin-sdk/directory/v1/reference/groups/list