API администратора Google Admin SDK - Получение групп из разных доменов
Я пытаюсь перенести наш код для использования (скоро будет объявлено устаревшим) API предоставления Google в API администратора SDK Directory через клиентские библиотеки.NET, предоставляемые Google.
В старом 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();
Не совсем ракетостроение, и требовались только учетные данные: домен, электронная почта администратора домена и пароль администратора. Пока вы можете указать эти три параметра, вы можете получить группы для любого домена.
В течение двух дней я пытался создать эквивалентный вызов с использованием нового API-интерфейса администратора SDK (через новую клиентскую библиотеку.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 таким образом, чтобы использовать те же параметры (домен, адрес электронной почты администратора и пароль), но я не могу ничего найти. Документация для клиентской библиотеки.NET API администратора крайне скудна и не помогает.
API предоставления будет объявлен устаревшим 20 апреля 2015 года, поэтому кто-то другой должен был столкнуться с этой проблемой. Кто-нибудь может помочь?
2 ответа
Вы можете создать проект в консоли разработчика Google и создать вместо него токен обновления / доступа. Вот ссылка - https://developers.google.com/accounts/docs/OAuth2WebServer
Я не использовал клиентскую библиотеку, поэтому не могу помочь вам с кодом. Вы можете использовать API списка, который предоставит вам все группы для всех доменов клиента (если вы укажете идентификатор клиента) - https://developers.google.com/admin-sdk/directory/v1/reference/groups/list
Вы должны использовать "impersonate" (через.setServiceAccountUser("user@example.com")) при создании учетных данных. Ищите примеры здесь.