PHP中的Google Apps Admin SDK目录API 403

时间:2013-10-01 09:03:09

标签: php google-api google-apps

我正在

 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。有什么想法吗?

4 个答案:

答案 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范围。