Получить не авторизованный доступ к идентификатору приложения после использования API Google Apps Marketplace

У меня есть веб-приложение, и я пытаюсь выяснить, какие пользователи в домене Google установили мое приложение. Я пытался использовать код отсюда: Определить, установлено ли в домене пользователя Google приложение my marketplace, но оно не работает. Я все еще получаю сообщение об ошибке "(403) Не авторизован для доступа к идентификатору приложения" в ответ.

Код:

            $private_key = file_get_contents('path_to_p.12_key');
            $service_account_name = '{service_acc_name}'; // name from developers console

            $cred = new Google_Auth_AssertionCredentials($service_account_name, array('https://www.googleapis.com/auth/appsmarketplace.license'), $private_key);

            $client = new Google_Client();
            $client->setAssertionCredentials($cred);

            $url = "https://www.googleapis.com/appsmarket/v2/licenseNotification/{appID}";

            $httpRequest = new Google_Http_Request($url, 'GET');
            $httpRequest->setBaseComponent($client->getBasePath());
            $httpRequest = $client->getAuth()->sign($httpRequest);

            try
            {
                    $result = $client->execute($httpRequest);
            }
            catch (Exception $e)
            {
                    echo $e->getMessage();
            }

Я также добавил https://www.googleapis.com/auth/appsmarketplace.license scope в настройках проекта в консоли разработчика.

Я не могу понять, что случилось.


person Dan Peresenchuk    schedule 26.10.2015    source источник
comment
Вы предоставили разрешение служебной учетной записи в AppsMarket для доступа к данным?   -  person DaImTo    schedule 26.10.2015
comment
Вы имеете в виду разрешения в консоли разработчиков? В консоли эта учетная запись службы имеет разрешения Может редактировать   -  person Dan Peresenchuk    schedule 26.10.2015
comment
Сервисная учетная запись не имеет доступа ко всему, к чему вы не даете ей доступ. Если вы пытаетесь читать из Apps Marketplace, вам нужно дать разрешение на рынке spps. Вопрос на миллион долларов: можете ли вы предоставить другому пользователю разрешение на просмотр ваших данных?   -  person DaImTo    schedule 26.10.2015
comment
Выполните шаги в блоке «Делегирование полномочий на уровне домена сервисному аккаунту» здесь: developers.google.com /identity/protocols/OAuth2ServiceAccount Я также предоставил разрешения для сервисной учетной записи в консоли администратора моего тестового домена. Это все. Может быть, я неправильно понимаю, о каких разрешениях вы говорите, но я больше нигде ничего не видел.   -  person Dan Peresenchuk    schedule 26.10.2015
comment
Области определяют разрешения, необходимые вашему приложению. Вы должны запрашивать только те области, которые вам нужны. Обычно вы запрашиваете только ту область, которая вам нужна, но в случае служебной учетной записи безопасно просто запросить полный доступ.   -  person DaImTo    schedule 27.10.2015


Ответы (1)


Хорошо, я решил это. Вы должны добавить все области в свой объект учетной записи службы, который используется вашим приложением (а не только те области, которые вы действительно хотите использовать учетной записью службы):

$cred = new Google_Auth_AssertionCredentials($service_account_name, array('https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/admin.directory.user.readonly', 'https://www.googleapis.com/auth/admin.directory.user', 'https://www.googleapis.com/auth/appsmarketplace.license'), $private_key);
person Dan Peresenchuk    schedule 27.10.2015
comment
Я могу подтвердить, что это действительно не нужно - вам нужен только прицел https://www.googleapis.com/auth/appsmarketplace.license. В соответствии с этим ответом, что на самом деле сработало для меня, было в консоли разработчика, чтобы также добавить API Marketplace, а не только Marketplace SDK - person Martin Gjaldbaek; 28.10.2016