我正在尝试使用Admin SDK PHP库列出我的谷歌域的用户。然而,当我试图列出我的用户时,我得到了403个用户。这是我尝试过的
$client = new Google_Client();
$client->setApplicationName("My Application");
$credential = new Google_Auth_AssertionCredentials(
$serviceAccount,
array('https://www.googleapis.com/auth/admin.directory.user'),
$privateKey,
'notasecret',
'http://oauth.net/grant_type/jwt/1.0/bearer'
);
$client->setAssertionCredentials($credential);
if($client->getAuth()->isAccessTokenExpired())
{
$client->getAuth()->refreshTokenWithAssertion($credential);
}
$service = new Google_Service_Directory($client);
$optParams = array('domain' => 'mydomain');
$results = $service->users->listUsers($optParams);
但是我得到这个403错误
Error calling GET https://www.googleapis.com/admin/directory/v1/users?domain=mydomain: (403) Not Authorized to access this resource/api
根据其他类似帖子的建议,我也尝试包括委托管理员,如下所示
$credential = new Google_Auth_AssertionCredentials(
$serviceAccount,,
array('https://www.googleapis.com/auth/admin.directory.user'),
$privateKey,
'notasecret',
'http://oauth.net/grant_type/jwt/1.0/bearer',
'admin@mydomain.com'
);
但是这会在refreshTokenWithAssertion($credential)
上产生以下错误Error refreshing the OAuth2 token, message: '{
"error" : "unauthorized_client",
"error_description" : "Unauthorized client or scope in request."
}'
我验证了服务帐户,并在项目控制台中启用了API。有人知道我做错了什么吗?请帮助。
我找到了这个错误的解决方案。我在Google_Auth_AssertionCredentials中添加了"sub",如下所示,并在admin.google.com->Security->管理API访问并授权它添加了客户端Id和范围。
$credential = new Google_Auth_AssertionCredentials(
$serviceAccount,,
array('https://www.googleapis.com/auth/admin.directory.user'),
$privateKey,
'notasecret',
'http://oauth.net/grant_type/jwt/1.0/bearer',
'admin@mydomain.com', false
);
+授权在admin.google.com->安全->管理API访问解决了这个问题。我为什么要授权是另一个问题。