0

快速背景:创建一个 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();
    }
}
4

1 回答 1

2

在您的数组中:

        array(
            'https://www.googleapis.com/auth/directory.user',
            'https://www.googleapis.com/auth/directory.group',
            'https://www.googleapis.com/auth/directory.group.member',
        ),

我认为授权请求应该是:

        array(
            'https://www.googleapis.com/auth/admin.directory.user',
            'https://www.googleapis.com/auth/admin.directory.group',
            'https://www.googleapis.com/auth/admin.directory.group.member',
        ),

更多信息可以在这里找到。

于 2014-09-20T17:58:01.403 回答