Моя организация имеет лицензию G Suite Legacy.
Я пытаюсь составить список всех членов организационной группы с помощью SDK Google Admin (каталог api), используя PHP.
Iследуя руководству SDK Google Admin ( Выполнение делегирования полномочий G Suite для всего домена ), прочитайте все SO вопросы и ответы (например, SO вопрос 26409201 , SO вопрос 39011470 ), искал в Google, но я все еще получаю 403 - не авторизован для доступа к этому ресурсу / ошибка API .
Большинство решений указывают на учетную запись службы, которая должна выдавать себя за другогопользователь организации с ролью «супер админ». но это правильно настроено в моем приложении php, я думаю.
Короче говоря, установка приложения PHP:
- в консоли разработчика Google:
- созданапроект
- добавил Admin SDK API
- создал учетную запись службы + выбранное делегирование для всего домена
- загрузил файл авторизации json
- роль учетной записи службы'владелец проекта'
- в консоли администратора Google:
- активировал доступ к API (Консоль администратора> Безопасность> Справка по API> Включить доступ по API)
- авторизовал идентификатор клиента учетной записи службы с необходимыми областями (Консоль администратора> Безопасность> Дополнительные параметры> Управление доступом клиента API)
- в коде авторизации php (google api php client 2.2.2): sa олицетворяет пользователя с правами администратора
- $ gClient-> setSubject ($ this-> ci-> config-> item ('setting') ['adminUserToImpersonate']);
Я также пытался составить список членов группы через:
- google api explorer : отлично работает
- скрипт Google для загрузки участников в лист Google: отлично работает
Оба с одной и той же организацией [adminUserToImpersonate]
Я больше не знаю настроек, которые я могу изменить, чтобы получить разрешение на использование API-интерфейса Справочника через учетную запись службы, которая олицетворяет пользователя-администратора.
Что такоепричина, по которой я получаю сообщение об ошибке 403 Не авторизовано?
Пользователь с правами администратора может перечислять членов группы через Google Api Explorer и скрипт Google (в Google Sheet), но не через организационный проект Google (учетная запись службы). авторизация через php клиент). Какие другие настройки нужны сервисной учетной записи?
Ниже используется код:
function ListGroupMembers() {
var users = [];
var groupKey = 'myGroupKey';
var options = {
maxResults: 100,
};
do {
var response = AdminDirectory.Members.list(groupKey, options)
response.members.forEach(function(user) {
users.push([user.id, user.email, user.status]);
});
// For domains with many users, the results are paged
if (response.nextPageToken) {
options.pageToken = response.nextPageToken;
}
} while (response.nextPageToken);
// Insert data in a spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Members")
sheet.getRange(1,1,users.length, users[0].length).setValues(users);
}
private function initializeGoogleServiceAccount() {
$gClient = new Google_Client();
$gClient->setSubject($this->ci->config->item('setting')['adminUserToImpersonate']);
$jsonAuth = $this->ci->config->item('google_service');
$gClient->setAuthConfig(json_decode($jsonAuth, true));
$gClient->setApplicationName($this->ci->config->item('google')['application_name']);
$gClient->addScope(Google_Service_Directory::ADMIN_DIRECTORY_GROUP_MEMBER_READONLY);
$gClient->setHostedDomain($this->ci->config->item('google')['hosted_domain']);
return $gClient;
}
public function getGroupMembers($groupKey) {
// validate groupKey
if(!isset($groupKey)) {return;}
// get google client
$gClient = $this->getGoogleServiceAccount();
$gDirectory = new Google_Service_Directory($gClient);
$params = array(
'groupKey' => $groupKey,
'maxResults' => 100,
'domain' => $this->ci->config->item('google')['hosted_domain'],
);
$response = $gDirectory->members->listMembers($params);
$members = $response->getMembers();
// if we have a paginated result set, continue doing a lookup until we are at the end
while (isset($reponse->nextPageToken) && ($reponse->nextPageToken != '')) {
$params = array(
'groupKey' => $groupKey,
'maxResults' => 100,
'pageToken' => $response->nextPageToken
);
$response = $gDirectory->members->listMembers($params);
$members = array_merge($members, $response->getGroups());
}
return $members;
}