2015-04-29 1 views
4

Я пытаюсь настроить код C# для управления нашим доменом Google.Получение Недопустимая ошибка разрешения из DirectoryService

Я получаю эту ошибку всякий раз, когда вызываю service.Users.List() или любой другой метод из DirectoryService api.

Google.Apis.Requests.RequestError 

Insufficient Permission [403] 

Errors [ 

    Message[Insufficient Permission] Location[ - ] Reason[insufficientPermissions] Domain[global] 

] 

Я выполнил все инструкции по установке OAuth. Учетная запись, которую я использую, является администратором домена.

Клиентский секретный файл, который я использую, отлично работает, когда я использую его с GAM.exe для выполнения тех же операций. Это заставляет меня думать, что я делаю что-то не так в своем коде.

Ниже приведен мой код для запросов пользователей, есть ли что-либо, что у меня отсутствует?

 static void Main(string[] args) 
    { 
     var applicationName = "App Project Name"; 
     var userName = "[email protected]"; 
     var clientID = "clientIDfromAPIcredentialpageonconsole.developers.google.com"; 

     UserCredential credential; 

     using (var stream = new FileStream("C:\\gam\\client_secrets.json", FileMode.Open, FileAccess.Read)) 
     { 
      credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       new[] { DirectoryService.Scope.AdminDirectoryOrgunit, DirectoryService.Scope.AdminDirectoryUser }, 
       userName, 
       CancellationToken.None, null).Result; 
     } 

     var service = new DirectoryService(new BaseClientService.Initializer() 
      { 
       ApplicationName = applicationName, 
       HttpClientInitializer = credential 
      }); 

     var list = service.Users.List(); 

     var users = list.Execute(); 
    } 
} 

ответ

2

2 варианта:

  1. Вы не включили правильный Scope. Вы уверены, что DirectoryService.Scope.AdminDirectoryOrgunit, DirectoryService.Scope.AdminDirectoryUser достаточно?
  2. Включили ли вы API в консоли? Дополнительную информацию можно получить по адресу: https://developers.google.com/api-client-library/dotnet/get_started#auth. Ищите свой проект в https://pantheon.corp.google.com/project и убедитесь, что вы включили API администратора каталога.

Обновите эту ветку, если один из этих параметров работает или что-то еще не хватает для вас.

+0

1. Я пытался добавить во всех областях, и это ничего не изменило. 2. В инструкциях в нем говорится: «Активируйте API-интерфейс каталогов в Google Developers Console. (Если API не указан в Консоли разработчиков, пропустите этот шаг.)« Когда я иду в консоль, Каталог API не указан ни в одном из API. Поэтому я предположил, что мне нужно пропустить этот шаг. Я включил администратор и gmail на всякий случай. – VaultBoy14

+1

Мне нужно было авторизовать приложение для URL-адреса api в admin.google scren – VaultBoy14

+0

Какой URL-адрес? По вашему коду, похоже, вы используете установленное приложение (и НЕ веб-приложение), правильно? Итак, какой URL-адрес вам нужно обновить? Можете ли вы подробнее рассказать, пожалуйста? – peleyal

0

Вот мой код работает учетные данные:

using (var stream = 
    new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) 
    { 
     string credPath = System.Environment.GetFolderPath(
      System.Environment.SpecialFolder.Personal); 
      credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json"); 

      UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       new string[] { CalendarService.Scope.Calendar }, 
       "[email protected]", 
       CancellationToken.None, 
       new FileDataStore(credPath, true)).Result; 
      Console.WriteLine("Credential file saved to: " + credPath); 
     } 

Убедитесь, что Включить API в консоли,