我正在Google App Engine(PHP)上构建一个小型应用程序,旨在将外部源与google组同步,以获取最新的邮件列表。 (它应作为GAE cron任务运行)
Google App Engine项目和google组位于GSuite域中。
The sources are here,请参阅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"
}
}
我已按照此处描述的步骤作为起点,因为它很接近我的需要:
https://medium.com/@Skaaptjop/access-gsuite-apis-on-your-domain-using-a-service-account-e2a8dbda287c
所以我做了以下事情:
在Google Cloud Console中:
在GSuite管理员中:
更新:我什至尝试添加更多权限,但仍然无法正常工作:
在我的项目中,我复制了JSON私钥,并在app.yaml中设置了变量GOOGLE_APPLICATION_CREDENTIALS和文件名。
我使用此Google lib访问Google网上论坛:
composer require 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 "</pre>"; } catch(Exception $e) { print_r($e); echo "</pre>"; }
我可以知道私钥已加载,因为print_r($ e)给出了一个长异常,并且列出了密钥。
print_r($ access_token);给出以下内容:
Array ( [access_token] => dag2qssffdVpRZEr...0BsM_QUgQ [expires_in] => 3599 [token_type] => Bearer [created] => 1586787451 )
$ MAILING_LIST:是邮件列表的完整电子邮件地址
我正在Google App Engine(PHP)上构建一个小型应用程序,旨在将外部源与google组同步,以获取最新的邮件列表。 (它应作为GAE cron任务运行)Google ...
因此上面的代码缺少模拟。