簡単な背景: php クラスを作成して、Google Apps アカウントのグループからメールを追加/削除します。Apps Admin Console と同じ Google アカウントを使用して、Developers Console でプロジェクトを作成しました。また、Google Apps アカウントは試用モードで、29 日後に有効期限が切れます (最初の支払いが保留中です)。
アプリの詳細: Composer 経由で Google API クライアントを使用するhttps://github.com/google/google-api-php-client
その他の詳細: Developers Console -> Project -> Admin SDK Enabled、Admin Console -> Security -> Api Access Enabled
問題: 「要求されたクライアントは許可されていません」という例外が発生します。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();
}
}