Клиентский API Google PHP - Ошибка 400 Admin SDK - PullRequest
0 голосов
/ 22 апреля 2020


Я пытаюсь получить группы, с которыми связан пользователь, в Google GSuite for Education. Я начал следовать учебному пособию, чтобы перечислить всех пользователей, связанных с ассоциацией, но я получил: ошибка 400 - «message»: «Неверный ввод.
До сих пор я создал проект с учетной записью службы, потому что я необходимо, чтобы не было никакого взаимодействия с пользователем, поскольку выборка должна выполняться автоматически.После этого я установил учетную запись как включенную для делегирования всего домена G Suite и поместил ее в авторизованный клиент API с https://www.googleapis.com/auth/admin.directory.group.readonly* 1005. * и https://www.googleapis.com/auth/admin.directory.user.readonly доменов, но когда я запускаю код, я получаю ошибку выше
Вот код:

<?php
  require_once './google-api/vendor/autoload.php';
  putenv('GOOGLE_APPLICATION_CREDENTIALS='.__DIR__.'/Culturalia.json');

  function getGoogleClient() {
    return getServiceAccountClient();
  }

  function getServiceAccountClient() {
    try {
        // Create and configure a new client object.
        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope([Google_Service_Directory::ADMIN_DIRECTORY_USER_READONLY]);
        return $client;
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
  }

  $client = getGoogleClient();
  $service = new Google_Service_Directory($client);


  // Print the first 10 users in the domain.
  $optParams = array(
    'customer' => 'my_customer',
    'maxResults' => 10,
    'orderBy' => 'email',
  );
  $results = $service->users->listUsers($optParams);


  if (count($results->getUsers()) == 0) {
    print "No users found.\n";
  } else {
    print "Users:\n";
    foreach ($results->getUsers() as $user) {
      printf("%s (%s)\n", $user->getPrimaryEmail(),
          $user->getName()->getFullName());
    }
  }
?>

Но я полагаю, что это, скорее всего, авторизация, которая Я где-то скучаю, любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 апреля 2020

Проблема:

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

Цель предоставления делегирования в рамках всего домена состоит в том, чтобы служебная учетная запись могла получить доступ к ресурсам от имени любой учетной записи в вашем домене. Тем не менее, вам нужно указать, какую учетную запись вы хотите выдать за себя; в противном случае вы не выдаете себя за кого-либо, и учетная запись службы действует так, как будто вы вообще не предоставили делегирование для всего домена .

Поскольку учетная запись службы технически не является частью домена, вы получаете сообщение об ошибке при попытке составить список пользователей домена.

Решение:

Чтобы выдать себя за учетную запись , вам необходимо указать его адрес электронной почты при настройке client, например:

$user = "email-address@your-domain";
$client->setSubject($user);

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...