0

Google에서 제공하는 (곧 사용 중단 될 예정인) Google 프로비저닝 API를 Google에서 제공하는 .NET 클라이언트 라이브러리를 통해 Admin SDK 디렉토리 API로 마이그레이션하려고합니다. . 도메인에 대한 그룹을 얻을 수있는 호출합니다 (.NET 클라이언트 라이브러리를 통해) 기존 프로비저닝 API에서 Google Admin SDK 디렉토리 API - 다양한 도메인에서 그룹 가져 오기

은 매우 간단했다 :

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(); 

아니 정확히 로켓 과학, 필요한 경우에만 자격 증명은 도메인했다 , 도메인의 관리자 이메일 및 관리자 비밀번호가 포함됩니다. 이 세 매개 변수를 제공 할 수있는 한 모든 도메인에 대한 그룹을 가져올 수 있습니다.

저는 (새 .NET 클라이언트 라이브러리를 통해) 새 Admin SDK 디렉토리 API를 사용하여 동일한 통화를 만드는 데 2 ​​일 동안 노력했지만, 매우 힘든 시간을 보냈습니다. 모든 작업을 수행 할 수있는 유일한 방법은 mwpreston의 유용한 post을 기반으로 개인 키 파일 생성을 포함하여 도메인의 관리자 전자 메일과 연결된 프로젝트에 대한 서비스 계정을 만드는 것입니다.

(서비스 계정에 대한 관리자 이메일 계정에 지정된대로) 서비스 계정은 특정 도메인과 연결되어 있기 때문에
//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(); 

그러나, 해당 특정 도메인에서 그룹을 요청하는 데 사용할 수 있습니다.

Google은 수천 개의 서로 다른 도메인을 보유한 고객을 보유하고 있습니다. 모든 클라이언트 도메인 (개인 키 파일은 물론)에 대해 새로운 서비스 계정을 만드는 것은 비현실적입니다.

동일한 매개 변수 (도메인, 관리자 이메일 및 비밀번호)를 사용하는 방식으로 DirectoryService를 호출하는 방법을 검색했지만 검색했지만 찾을 수 없습니다. Admin API .NET 클라이언트 라이브러리에 대한 설명서는 매우 드물고 도움이되지 않습니다.

2015 년 4 월 20 일에 프로비저닝 API가 지원 중단 될 예정이므로 다른 사용자가이 문제에 직면했을 것입니다. 누구든지 도와 줄 수 있습니까?

답변

0

자격 증명을 구성하는 동안 .setServiceAccountUser ("[email protected]")을 통해 "가장"을 사용해야합니다. 예 : here을 찾으십시오.

+0

불행히도 내 문제는 해결되지 않습니다. _different_ 많은 도메인에서 그룹 (및 그룹의 구성원)을 요청할 수 있어야합니다. 원래 API를 사용하여 도메인, 관리자 이메일 및 비밀번호를 사용하여 전화를 걸 수있었습니다. 새 API는 각 도메인에 대해 특정 서비스 계정을 사용한다고 주장하는 것 같습니다. 고객이 수천 개의 도메인을 보유하고있어 비실용적입니다. –

+0

어쩌면 난 그저 당신의 문제를 이해할 수 없지만 내 애플리케이션에서는 자격 증명 객체 (serviceAccountUser - 대상 도메인 관리자를 제외하고는 여전히 동일 함)를 구성하여 하나의 서비스 계정으로 다른 도메인의 디렉토리 정보에 액세스합니다. 당신은 다음 코드에서 볼 수있는 디렉토리 API를 생성자/빌더 ... – user3686724

+0

GoogleCredential.Builder BGC = 새로운 GoogleCredential.Builder() \t \t \t .setTransport (t) \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 = 새 Directory.Builder (gc.getTransport(), gc.getJsonFactory(), null) .setHttpRequestInitializer (gc) .build(); – user3686724

0

Google 개발자 콘솔에서 프로젝트를 만들고 대신 새로 고침/액세스 토큰을 생성 할 수 있습니다. 여기에 링크가 있습니다 - https://developers.google.com/accounts/docs/OAuth2WebServer

나는 클라이언트 라이브러리를 사용하지 않았으므로 코드를 사용할 수 없습니다. 고객의 모든 도메인에 대한 모든 그룹을 제공하는 'list'API를 사용할 수 있습니다 (고객 ID를 입력 한 경우). - https://developers.google.com/admin-sdk/directory/v1/reference/groups/list

관련 문제