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")) при создании учетных данных. Ищите примеры здесь.

Другие вопросы по тегам