2014-12-06 3 views
2

key.p12 인증서가있는 서비스 계정을 사용하여 Google 캘린더 API에 액세스하고 있습니다. 그러나 도메인의 모든 사용자의 일정에 액세스 할 수는 없습니다. 도메인 계정에 대한 권한을 서비스 계정에 위임하는 단계를 수행했습니다. https://developers.google.com/accounts/docs/OAuth2ServiceAccount.net에서 서비스 계정을 사용하여 도메인 사용자의 캘린더에 액세스하는 방법?

.net에 대한 코드 샘플이 없습니다. 그리고 그것은 Google .net 클라이언트 라이브러리에서만 ServiceAccountCredential을 얻는 것 같습니다. 여기 내 코드는

static void Main(string[] args) 
    { 
     string serviceAccountEmail = "[email protected]"; 
     var certificate = new X509Certificate2(@"clientPrivateKey.p12", "notasecret", X509KeyStorageFlags.Exportable); 

     Console.WriteLine("service account: {0}", serviceAccountEmail); 

     ServiceAccountCredential credential = new ServiceAccountCredential(new 
     ServiceAccountCredential.Initializer(serviceAccountEmail) 
     { 
      Scopes = new[] { CalendarService.Scope.Calendar } 
     }.FromCertificate(certificate)); 

     BaseClientService.Initializer initializer = new BaseClientService.Initializer();    

     initializer.HttpClientInitializer = credential;   
     initializer.ApplicationName = "Google Calendar Sample"; 
     CalendarService calservice = new CalendarService(initializer); 

     // list all the calendars it can see 
     try 
     { 
      var list = calservice.CalendarList.List().Execute(); 

      if (list.Items.Count > 0) 
      { 
       foreach(var item in list.Items) 
       { 
        Console.WriteLine("Found calendar for account {0}", item.Id); 
       } 
      } 
      else 
      { 
       Console.WriteLine("Calendar list for this service account is empty"); 
      } 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 

캘린더 목록은 항상 비어 있습니다. 일정 설정에서이 서비스 계정으로 내 도메인 계정 일정을 수동으로 공유하면이 코드는 내 도메인 계정 달력을 성공적으로 반환합니다.

이 서비스 계정을 도메인의 모든 사용자의 캘린더에 액세스하는 방법이 있습니까? 당신이 지적

답변

2

실제로 코드는 서비스 계정으로 일정을 공유하려고 시도하는 대신 서비스 계정을 사용하여 도메인 사용자를 하나씩 "가장합니다".

ServiceAccountCredential.Initializer(serviceAccountEmail) 
    { 
     Scopes = new[] { CalendarService.Scope.Calendar }, 
     User = "[email protected]" // impersonate domain user 
    }.FromCertificate(certificate)); 

또한 구글 도메인 관리 콘솔에서 서비스 계정에 도메인 전체에 권한을 위임하기위한 단계를 수행하고

(달력, 그것은 https://www.googleapis.com/auth/calendar입니다) 권리 범위를 추가 필요
0

, 해당 서비스 계정으로 기존의 일정을 공유 할 필요가

<paste-your-account-here>@developer.gserviceaccount.com 

(당신은 Google 개발자 콘솔의 자격 증명 탭에서 문제의 계정을 찾을 수 있습니다, 그것은 '이메일 주소'라고)

희망이 있습니다.