0

簡単な背景: 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();
    }
}
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 に答える