Я создал серверное приложение на PHP, которое должно работать с таблицами Google.
Я могу успешно пройти проверку подлинности с помощью проверки подлинности OAuth 2.0, но при запросе списка электронных таблиц у Google я получаю только те таблицы, которыми владелец электронной таблицы поделился с учетной записью службы.
Есть ли способ, чтобы учетная запись службы могла получать все электронные таблицы, принадлежащие моей основной учетной записи, а не служебную, включая те, которые явно не используются совместно с учетной записью службы?
Кроме того, я все еще хочу держать электронные таблицы в секрете, чтобы никто не мог получить к ним доступ без моего разрешения, но мне нужна служебная учетная запись, чтобы иметь полный доступ как к существующим, так и к новым электронным таблицам.
Любой совет приветствуется.
Вы должны изменить подход:
Создайте сервисную учетную запись в Drive. Вы можете управлять и использовать эту учетную запись только с API (не с веб-интерфейсом, как обычно)
С помощью Drive API вы можете просматривать, создавать, обновлять, удалять и изменять права доступа к файлам. Когда вы создаете новый файл, вы можете поделиться им — всегда с API — для нужных вам пользователей, сделать новый файл общедоступным или сменить владельца.
Пожалуйста, взгляните: https://developers.google.com/drive/v2/reference/permissions
Вот пример сценария, который использует учетную запись службы для чтения содержимого таблицы Google Spreadsheet. Посмотрите на README, чтобы получить инструкции по его настройке:
https://github.com/juampynr/google-spreadsheet-reader
Я предполагаю, что вы используете Google Apps, а не личный аккаунт GMail. Вы можете использовать свою учетную запись службы для олицетворять ваш основной аккаунт.
Обратите внимание, что здесь я имею в виду служебную учетную запись в том виде, в каком это понимает Google: закрытый ключ (в формате p12) и идентификатор. Это не учетная запись Служб Google, используемая в технических целях. Больше информации здесь.
Это сделано:
Шаги абсолютно одинаковы для API Spreadsheet и для Drive API.
Чтобы сначала авторизовать свою учетную запись службы для олицетворения пользователей домена, вы можете выполнить эта документация. Вот основные шаги. Вы должны быть администратором домена для выполнения этой задачи.
Когда это будет сделано, вам нужно обновить свой код, чтобы он олицетворял вашу основную учетную запись:
$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
ошибки. Если ваш клиент не обрабатывает это автоматически, вам нужно будет перехватить ошибку и сгенерировать токен.