Как получить доступ к admin.directory.group через OAuth2 в задании cron?

Я пытаюсь (и не могу) использовать OAuth2 для вызовов области admin.directory.group через сценарий командной строки. Я попытался настроить учетную запись службы для этого, но получил следующее сообщение об ошибке:

Ошибка при вызове GET https://www.googleapis.com/admin/directory/v1/groups/foo%40example.com: (403) Не авторизован для доступа к этому ресурсу/api

Я также попытался использовать тип приложения «Установлено», выполнив ручной шаг по получению кода авторизации, а затем токена обновления, но получил ту же ошибку Not Authorized.

У меня есть флажок «Включить доступ к API», а также включен «Admin SDK» в моем проекте (хотя, как ни странно, он не указывает admin.directory.group в качестве одной из областей действия Admin SDK).

Что я делаю не так?


person molecularbear    schedule 24.12.2013    source источник


Ответы (2)


Вы добавили идентификатор клиента в консоль администратора, чтобы предоставить доступ по протоколу oauth для стороннего клиента Admin SDK?

Вот инструкция, как это сделать для API задачи:

https://developers.google.com/google-apps/help/articles/2lo-in-tasks-for-admins#manage

Это должно быть похоже на Admin SDK, за исключением того, что вам нужно будет указать Admin SDK в качестве области действия.

person Emily    schedule 24.12.2013
comment
Я пробовал это, но все, что, похоже, применимо к OAuth1, а не к OAuth2. Разве нельзя использовать для этого OAuth2? - person molecularbear; 25.12.2013

Я наконец-то заставил это работать, используя сервисный аккаунт. Мне пришлось предоставить сторонний доступ, как предложила Emily Lam, но другим способом:

  1. Войдите в консоль администратора
  2. Безопасность -> Дополнительные настройки -> Аутентификация -> Управление доступом стороннего клиента OAuth
  3. Авторизуйте нового клиента, установив Client Name на идентификатор клиента учетной записи службы, а область API на то, что вам нужно из Admin SDK (например, https://www.googleapis.com/auth/admin.directory.group)

Другое, что мне нужно было сделать, это убедиться, что мой запрос был сделан от имени пользователя с правами администратора. Используя PHP API, настройка объекта учетных данных выглядит следующим образом:

$cred = new Google_Auth_AssertionCredentials(
    $clientEmail,
    'https://www.googleapis.com/auth/admin.directory.group',
    file_get_contents($keyFile));
$cred->sub = '[email protected]';

Теперь я могу успешно совершать звонки, используя класс Google_Service_Directory.

person molecularbear    schedule 26.12.2013