Я создаю небольшое приложение на Google App Engine (PHP), цель которого - синхронизировать внешний источник с группой Google, чтобы иметь актуальный список рассылки. (он должен запускаться как задача cron GAE)
Проект Google App Engine и группа Google находятся внутри домена GSuite.
Источники здесь , см. firestore2ggroup . php
Проблема, с которой я сталкиваюсь, связана с безопасностью, когда я пытаюсь вызвать API, я получаю ошибку 403. Никаких других подробностей не получается.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Not Authorized to access this resource/api"
}
],
"code": 403,
"message": "Not Authorized to access this resource/api"
}
}
I ' Мы выполнили шаги, описанные здесь в качестве отправной точки, поскольку это было близко к моей потребности:
https://medium.com/@Skaaptjop / access-gsuite-apis-on-your-domain-using-a-service-account -e2a8dbda287 c
Итак, я сделал следующее:
обновление: я даже пытался добавить больше прав, но он все еще не работает:
В моем проекте я скопировал закрытый ключ JSON и установил в app.yaml переменную GOOGLE_APPLICATION_CREDENTIALS с именем файла.
Я использовал эту библиотеку Google для доступа к Группа Google:
composer Требуется Google / apiclient: ^ 2.0
try
{
$client = new Google_Client();
$client->setApplicationName('Pegass2GGroup');
$client->setScopes(
[
Google_Service_Directory::ADMIN_DIRECTORY_GROUP,
Google_Service_Directory::ADMIN_DIRECTORY_GROUP_MEMBER,
Google_Service_Directory::ADMIN_DIRECTORY_USER
]);
$client->useApplicationDefaultCredentials(true);
$access_token = $client->fetchAccessTokenWithAssertion();
print_r($access_token);
$service = new Google_Service_Directory($client);
/** @var $members Google_Service_Directory_Members */
$members = $service->members->listMembers($MAILING_LIST);
/** @var $member Google_Service_Directory_Member */
foreach ($members as $member)
{
print_r($member->getEmail());
}
echo "
"; } catch (Exception $ e) {print_r ($ e); echo ""; }
Я могу сказать, что закрытый ключ загружен, потому что print_r ($ e) выдает длинное исключение, а ключ указан в списке.
print_r ($ access_token); дает следующее:
Array
(
[access_token] => dag2qssffdVpRZEr...0BsM_QUgQ
[expires_in] => 3599
[token_type] => Bearer
[created] => 1586787451
)
$ MAILING_LIST: полный адрес электронной почты в списке рассылки