快速背景:创建一个 php 类以从 google 应用程序帐户下的组中添加/删除电子邮件。我为 Apps Admin Console 使用了相同的 google 帐户,在 Developers Console 下创建了一个项目。此外,谷歌应用程序帐户处于试用模式,有效期为 29 天(等待初始付款)。
应用详情:通过 Composer 使用 Google API 客户端https://github.com/google/google-api-php-client
其他详细信息:开发人员控制台 -> 项目 -> 启用管理 SDK,管理控制台 -> 安全 -> 启用 Api 访问
问题:获取异常“请求的客户端未授权”。在 refreshTokenWithAssertion() 调用
如果我从下面的代码中注释掉 $cred->sub = 我会得到这个异常
Error calling GET https://www.googleapis.com/admin/directory/v1/groups/{groupemail}/members/{memberemail}: (403) Not Authorized to access this resource/api
代码:
static public function test() {
try {
$client = new Google_Client();
$client->setApplicationName('app-name');
$service = new Google_Service_Directory($client);
if (!empty(self::$serviceToken)) {
$client->setAccessToken(self::$serviceToken);
}
$key = file_get_contents(APP . DS . 'Config' . DS . 'google.p12');
$cred = new Google_Auth_AssertionCredentials(
'...........-.............@developer.gserviceaccount.com',
array(
'https://www.googleapis.com/auth/directory.user',
'https://www.googleapis.com/auth/directory.group',
'https://www.googleapis.com/auth/directory.group.member',
),
$key,
'notasecret'
);
$cred->sub = 'google apps account email';
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
self::$serviceToken = $client->getAccessToken();
$resp = $service->members->get('group email address', 'email address of group member');
}
catch (Exception $e) {
echo $e->getMessage();
}
}