Я пытаюсь создать приложение Google Диска, которое может работать в фоновом режиме (например, cronjob), без какого-либо взаимодействия с пользователем, используя учетную запись службы SDK Google Диска, но это дает мне эту ошибку, и я не понимаю, почему:
Ошибка при вызове POST https://www.googleapis.com/upload/drive/v1/files?uploadType=multipart : (403) Аутентифицированный пользователь не установил приложение с идентификатором клиента {my_client_id}
- Как прочитать таблицу на Google Диске в PHP?
- Использовать API Google Диска с Laravel
- Не удалось получить доступ к моему файлу Google. Файлы с учетной записью службы.
- Как обновить файл на Google Диске v3 PHP
- Загрузить файл через PHP на Google Диск с помощью API без экрана согласия
- Отображение документов с Google Диска на веб-странице
В Google APIs Console я активировал Drive API и Drive SDK. На вкладке SDK накопителя я установил всю необходимую информацию. Я также опубликовал свое приложение для тестировщиков только в интернет-магазине Chrome и установил его в свой Google Chrome, а имя приложения появилось в меню «Создать» на Google Диске.
Это фрагмент моего кода:
<?php require_once dirname(__FILE__).'/google-api-php-client/src/apiClient.php'; require_once dirname(__FILE__).'/google-api-php-client/src/contrib/apiDriveService.php'; $apiClient = new apiClient(); $apiClient->setClientId(DRIVE_CLIENT_ID); $apiClient->setClientSecret(DRIVE_CLIENT_SECRET); $apiClient->setAssertionCredentials(new apiAssertionCredentials( OAUTH2_EMAIL, array('https://www.googleapis.com/auth/drive.file'), file_get_contents(SERVICE_ACCOUNT_PRIVATEKEY_FILE)) ); $apiDriveService = new apiDriveService($apiClient); $file = new DriveFile(); $file->setTitle('filename.txt'); $file->setMimeType('text/plain'); $createdFile = $apiDriveService->files->insert($file, array( 'data' => 'file content goes here....', 'mimeType' => 'text/plain' )); ?>
Насколько я понимаю, приложение может использовать учетную запись службы для SDK Google Диска от имени пользователя. Означает ли это, что пользователю не задан вопрос аутентификации (запрос на разрешения)? Тогда как приложение аутентифицируется? Или мое понимание, вероятно, неверно? Пожалуйста, помогите просветить меня здесь.
Учетные записи службы не поддерживаются SDK накопителя из-за его модели безопасности.
Я бы предложил открыть (или создать) файл из веб-интерфейса Google Диска с вашим приложением и сохранить извлеченный доступ и обновить токены, которые вы получите после завершения авторизации потока OAuth 2.0.
Из вашего задания cron просто загрузите эти учетные данные, чтобы отправлять авторизованные запросы в API накопителя от имени вашего пользователя.