Как получить доступ к таблицам Google с учетными данными учетной записи службы?

Я создал серверное приложение на PHP, которое должно работать с таблицами Google.

Я могу успешно пройти проверку подлинности с помощью проверки подлинности OAuth 2.0, но при запросе списка электронных таблиц у Google я получаю только те таблицы, которыми владелец электронной таблицы поделился с учетной записью службы.

Есть ли способ, чтобы учетная запись службы могла получать все электронные таблицы, принадлежащие моей основной учетной записи, а не служебную, включая те, которые явно не используются совместно с учетной записью службы?

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

Любой совет приветствуется.

6

Решение

Вы должны изменить подход:

  1. Создайте сервисную учетную запись в Drive. Вы можете управлять и использовать эту учетную запись только с API (не с веб-интерфейсом, как обычно)

  2. С помощью Drive API вы можете просматривать, создавать, обновлять, удалять и изменять права доступа к файлам. Когда вы создаете новый файл, вы можете поделиться им — всегда с API — для нужных вам пользователей, сделать новый файл общедоступным или сменить владельца.

Пожалуйста, взгляните: https://developers.google.com/drive/v2/reference/permissions

2

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

Вот пример сценария, который использует учетную запись службы для чтения содержимого таблицы Google Spreadsheet. Посмотрите на README, чтобы получить инструкции по его настройке:

https://github.com/juampynr/google-spreadsheet-reader

5

Я предполагаю, что вы используете Google Apps, а не личный аккаунт GMail. Вы можете использовать свою учетную запись службы для олицетворять ваш основной аккаунт.

Обратите внимание, что здесь я имею в виду служебную учетную запись в том виде, в каком это понимает Google: закрытый ключ (в формате p12) и идентификатор. Это не учетная запись Служб Google, используемая в технических целях. Больше информации здесь.

Это сделано:

  1. Авторизация учетной записи службы в вашем домене Служб Google
  2. Измените код, который вы используете для генерации учетных данных API

Шаги абсолютно одинаковы для API Spreadsheet и для Drive API.

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

  1. Перейдите в консоль администратора домена Google Apps: https://admin.google.com
  2. Выбрать Безопасность из списка элементов управления. Если ты не видишь Безопасность в списке выберите Больше
    управления
    из серой панели внизу страницы, затем выберите
    Безопасность из списка элементов управления.
  3. Выбрать Расширенные настройки от
    список опций.
  4. Выбрать Управление доступом стороннего клиента OAuth
    в Аутентификация раздел.
  5. в Имя клиента поле введите
    Идентификатор клиента учетной записи службы. в Одна или несколько областей API поле
    введите список областей, в которых ваша заявка должна быть предоставлена
    доступ к. В вашем случае это будет как минимум область API Spreadsheet: https://spreadsheets.google.com/feeds

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

$key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
$auth = new Google_AssertionCredentials(
'YOUR_SERVICE_ACCOUNT_EMAIL',
array('https://spreadsheets.google.com/feeds'),
$key);
$auth->sub = '[email protected]';

Затем вы можете использовать $authпеременная для генерации токенов OAuth, необходимых для доступа к API электронной таблицы. Я не уверен, какой клиент вы используете для этого, поэтому способ ввода токена доступа будет зависеть от того, какой клиент вы используете.

Также обратите внимание, что этот токен истекает через 1 час, а затем API начнет возвращаться Session Expired ошибки. Если ваш клиент не обрабатывает это автоматически, вам нужно будет перехватить ошибку и сгенерировать токен.

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