0

Я пытаюсь перенести наш код на использование API-интерфейса Google Provisioning API API-интерфейса администратора, через клиентские библиотеки .NET, предоставленные Google ,API-интерфейс API администратора Google Admin - Получение групп из разных доменов

В старом 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(); 

Не совсем ракетостроение, и только учетные данные, необходимые были домен , адрес электронной почты администратора домена и пароль администратора. Пока вы можете предоставить эти три параметра, вы можете получить группы для любого домена.

Я пытался в течение двух дней создать эквивалентный вызов, используя новый API каталогов Admin SDK (через новую клиентскую библиотеку .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 чрезвычайно редкая и не нужна.

API-интерфейс Provisioning API будет устаревшим 20 апреля 2015 года, поэтому кто-то еще должен был столкнуться с этой проблемой. Может ли кто-нибудь помочь?

ответ

0

Вы должны использовать «олицетворять» (через .setServiceAccountUser («[email protected]»)) при создании учетных данных. Ищите примеры here.

+0

К сожалению, это не решит мою проблему. Мне нужно иметь возможность запрашивать группы (и членов групп) из многих доменов _different_. Исходный API позволил мне сделать вызов с использованием домена, электронной почты администратора и пароля; новый API, похоже, настаивает на том, что я использую определенную учетную запись службы для каждого домена. Это непрактично, потому что у наших клиентов есть тысячи доменов. –

+0

Возможно, я просто не понимаю вашу проблему, но в моих приложениях я также получаю доступ к информации о каталогах для разных доменов с одной учетной записью службы, создавая только объект учетных данных (который все тот же, за исключением serviceAccountUser - target domain admin), который затем передается каталог апи конструктор/строитель, как вы можете видеть в следующем коде ... – user3686724

+0

GoogleCredential.Builder КУП = новый GoogleCredential.Builder() \t \t \t .setTransport (т) \t \t \t.setJsonFactory (jsonFactory) \t \t \t .setServiceAccountScopes (прицелы) \t \t \t .setServiceAccountPrivateKey (serviceAccountPrivateKey) \t \t \t .setServiceAccountId (Config.SERVICE_ACCOUNT_ID) .setServiceAccountUser (serviceAccountUser); Каталог dir = new Directory.Builder (gc.getTransport(), gc.getJsonFactory(), null) .setHttpRequestInitializer (gc) .build(); – user3686724

0

Вы можете создать проект в Google Developer Console и создать вместо него токен обновления/доступа. Вот ссылка: https://developers.google.com/accounts/docs/OAuth2WebServer

Я не использовал клиентскую библиотеку, поэтому не могу помочь вам с кодом. Вы можете использовать API «списка», который предоставит вам все группы для всех доменов клиента (если вы предоставите customerId) - https://developers.google.com/admin-sdk/directory/v1/reference/groups/list

Смежные вопросы