1

Я использую учетную запись службы для делегирования безопасности домена, чтобы вытащить листинг пользователя из нашего экземпляра Google Apps для образования через API-интерфейс Directory и PHP-клиент библиотека.Исключено исключение «Доступ запрещен», хотя учетная запись имеет доступ

Я совершенно уверен, что у моей учетной записи службы есть все правильная безопасность, потому что она может вытащить листинг, используя функцию «попробовать» с помощью.

Таким образом, на данный момент, все указывая на вопрос с моим кодом, но я не могу показаться, чтобы выяснить, где:

<?php 
require 'vendor/autoload.php'; 

$clientEmail = '<>@developer.gserviceaccount.com'; 
$privateKey = file_get_contents(__DIR__ . '/access.p12'); 
$scopes = array(
    'https://www.googleapis.com/auth/admin.directory.user.readonly', 
); 

$credentials = new Google_Auth_AssertionCredentials($clientEmail, $scopes, $privateKey); 
$credentials->sub = '[email protected]'; 

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

if ($client->getAuth()->isAccessTokenExpired()) 
{ 
    $client->getAuth()->refreshTokenWithAssertion(); 
} 

$directory = new Google_Service_Directory($client); 

$result = $directory->users->listUsers(array('domain' => 'my.domain')); 

var_dump($result); 

Код выше выдает следующее сообщение об ошибке:

Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Error refreshing the OAuth2 token, message: ' in C:\wamp\www\quick\vendor\google\apiclient\src\Google\Auth\OAuth2.php on line 358 

Google_Auth_Exception: Error refreshing the OAuth2 token, message: '{ 
    "error" : "access_denied", 
    "error_description" : "Requested client not authorized." 
}' in C:\wamp\www\quick\vendor\google\apiclient\src\Google\Auth\OAuth2.php on line 358 

Call Stack: 
    0.0010  132792 1. {main}() C:\wamp\www\quick\index.php:0 
    0.0260 1060248 2. Google_Auth_OAuth2->refreshTokenWithAssertion() C:\wamp\www\quick\index.php:18 
    0.9230 1163560 3. Google_Auth_OAuth2->refreshTokenRequest() C:\wamp\www\quick\vendor\google\apiclient\src\Google\Auth\OAuth2.php:309 

ответ

1

Стек вызовов должен идентифицировать конкретную строку, в которой произошла эта ошибка. Обратите внимание, что вторая строка в стеке, кажется, указывает на линию 18 вашего сценария, где код действительно относится к проверке OAuth:

$client->getAuth()->refreshTokenWithAssertion(); 

Другими словами, когда вы пытаетесь refreshTokenWithAssertion, Google говорит, что «ACCESS_DENIED потому что просил клиент не авторизовался ». Если вы пытаетесь определить, где в вашем скрипте вы попали на ошибку, я думаю, что это должно ответить на ваш вопрос.

Если вы хотите, чтобы выяснить, почему он получил ошибку, я бы сделать некоторые поиски Google для refreshTokenWithAssertion плюс, что сообщение об ошибке и посмотреть, если вы обнаружите какие-либо другие разработчики, работающие по аналогичной проблемой. Например, выполнив этот поиск Google, я нашел this other page on SO, который может вам помочь.

Удачи вам!

+1

Спасибо. Я ценю вашу конструктивность. Он открыл двери. –

+0

Отлично, рад, что я мог бы помочь! –

 Смежные вопросы

  • Нет связанных вопросов^_^