我正在
Error calling GET https://www.googleapis.com/admin/directory/v1/users/email@example.com.com: (403) Not Authorized to access this resource/api
运行时
$client = new Google_Client();
$client->setClientId(GOOGLEAPPS_CLIENT_ID);
$client->setApplicationName(SITE_NAME);
$key = file_get_contents(APPLICATION_PATH . 'googleapps-privatekey.p12');
$assertion = new Google_AssertionCredentials(
GOOGLEAPPS_EMAIL_ADDRESS, // the service account name
array('https://www.googleapis.com/auth/admin.directory.user'), // see https://developers.google.com/admin-sdk/directory/v1/guides/authorizing
$key);
$client->setAssertionCredentials($assertion);
$service = new Google_DirectoryService($client);
$user = $service->users->get('email@example.com');
我按照说明https://developers.google.com/admin-sdk/directory/v1/guides/prerequisites 并勾选启用API访问权限。我使用Google API控制台https://code.google.com/apis/console生成服务帐户密钥,并使其正常工作。
https://groups.google.com/forum/#!msg/google-api-php-client/LM-mwmuZe7I/IA_K5v1R1UMJ
我使用了Google PHP库,并按照https://code.google.com/p/google-api-php-client/wiki/OAuth2?hl=no#Service_Accounts的说明尝试使服务帐户正常运行。调试他们的代码:我正在授权,并按预期获得一个新的访问令牌https://developers.google.com/accounts/docs/OAuth2ServiceAccount。
我无法弄清楚为什么我得到“未授权访问此资源/ api”消息,当我读到的所有内容都说明我已将其全部切换为OK。有什么想法吗?
答案 0 :(得分:4)
让它运转起来。您需要包含管理员的用户电子邮件,以便oAuth授权您为该用户。尝试
$assertion = new Google_AssertionCredentials(
GOOGLEAPPS_EMAIL_ADDRESS, // the service account name
array('https://www.googleapis.com/auth/admin.directory.user'), // see https://developers.google.com/admin-sdk/directory/v1/guides/authorizing
$key,
'notasecret',
'http://oauth.net/grant_type/jwt/1.0/bearer',
'admin_user@email.com'
);
此后,您需要为管理控制台请求的范围授权client_id->安全性 - >高级设置 - >身份验证 - >管理OAuth客户端访问
答案 1 :(得分:1)
我遇到了类似的问题。我正在使用.NET库。 [DriveService][1]
示例在创建提供程序时缺少参数:ServiceAccountUser,它似乎必须是ADMIN的电子邮件地址。我错过了它是一名管理员并且正在接受:
Not Authorized to access this resource/api [403]
只要我将其切换到管理员帐户,就可以了。我担心我不会说PHP,但我希望这有帮助。
答案 2 :(得分:1)
如果您收到错误
Class 'Google_AssertionCredentials' not found
您使用的是较新的库,Google_AssertionCredentials
现在是Google_Auth_AssertionCredentials
。
请参阅: https://github.com/google/google-api-php-client/blob/master/src/Google/Auth/AssertionCredentials.php
答案 3 :(得分:0)
您是否授予服务帐户访问控制面板中给定范围的权限?请参阅instructions in the Drive SDK并根据需要替换Admin SDK范围。