Google php клиентская библиотека loadServiceAccountJson не работает — исправлено

Новая функция в библиотеке php loadServiceAccountJson не позволяет устанавливать саб в Google_Auth_AssertionCredentials Создатель, поэтому всегда дает разрешение на неудачу. Как нам обновить библиотеку?

Следующие инструкции разрешат рабочий запрос, в моем случае к API Admin SDK Directory:

Сначала обновите функцию библиотеки php loadServiceAccountJson в src/Google/Client.php к этому:

  public function loadServiceAccountJson($jsonLocation, $scopes)
{
$data = json_decode(file_get_contents($jsonLocation));
if (isset($data->type) && $data->type == 'service_account') {
// Service Account format.
$cred = new Google_Auth_AssertionCredentials(
$data->client_email,
$scopes,
$data->private_key,
'notasecret',
'http://oauth.net/grant_type/jwt/1.0/bearer',
$data->sub
);
return $cred;
} else {
throw new Google_Exception("Invalid service account JSON file.");
}
}

Затем добавьте значение sub к данным в вашем файле аутентификации json сервера, загруженным из консоли разработчика / API & Аутентификация / учетные данные (необходимо создать учетную запись службы) — укажите имя файла serverauth.json:

{
"private_key_id": "removed",
"private_key": "-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----\n",
"client_email": "removed",
"client_id": "removed",
"redirect_uris":[your urls here],
"type": "service_account",
"sub": "[email protected]"}

Теперь получите разрешение:

$credentials = $client->loadServiceAccountJson('serverauth.json',"https://www.googleapis.com/auth/admin.directory.user.readonly");
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}

И наконец, создайте экземпляр Directory и запросите его:

$service = new Google_Service_Directory($client);
$optParams = array(
'domain' => 'google.domain.com',
'orderBy' => 'email',
'viewType' => 'domain_public',
'query' => "givenName:'Joe' familyName:'Schmoe Jr'");
$results = $service->users->listUsers($optParams);
$users = $results->getUsers();

print_r($users);

0

Решение

Новый Google API теперь немного другой:

$client = new Google_Client();
$client->setApplicationName("YourAppName");
$client->setAuthConfig(<JSON-Config-File-Location>);
$client->setScopes(array("https://www.googleapis.com/auth/admin.directory.user.readonly", "https://www.googleapis.com/auth/admin.directory.group.readonly"));
$client->setSubject(<User-Email-To-Impersonate>);

$service = new Google_Service_Directory($client);
$results = $service->users->listUsers(array('domain' => '<your-domain-name>'));

Я все еще пытаюсь понять, как я могу получить это без необходимости выдавать себя за пользователя?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]