Ошибка учетной записи службы SDK Google Диска. Пользователь, прошедший проверку подлинности, не установил приложение с идентификатором клиента.

Я пытаюсь создать приложение Google Диска, которое может работать в фоновом режиме (например, cronjob) без какого-либо взаимодействия с пользователем, используя учетную запись службы SDK Google Диска, но оно выдает мне эту ошибку, и я не могу понять, почему:

Ошибка при вызове POST https://www.googleapis.com/upload/drive/v1/files?uploadType=multipart: (403) Авторизованный пользователь не установил приложение с идентификатором клиента {my_client_id}

В консоли Google API я активировал Drive API и Drive SDK. На вкладке Drive 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 Диска от имени пользователя. Означает ли это, что у пользователя нет вопроса аутентификации (запроса разрешений)? Тогда как приложение аутентифицирует себя? Или мое понимание, вероятно, неправильно? Пожалуйста, помогите просветить меня здесь.


person Irwan    schedule 03.05.2012    source источник


Ответы (1)


Сервисные аккаунты не поддерживаются Drive SDK из-за его модели безопасности.

Я бы предложил открыть (или создать) файл из веб-интерфейса Drive с вашим приложением и сохранить полученные токены доступа и обновления, которые вы получаете после завершения потока авторизации OAuth 2.0.

Из своего задания cron просто извлеките эти учетные данные для отправки авторизованных запросов к Drive API от имени вашего пользователя.

person Alain    schedule 03.05.2012