3

Google ドライブ SDK サービス アカウントを使用して、バックグラウンドで実行できる Google ドライブ アプリ (例: cronjob) をユーザーの操作なしで作成しようとしていますが、このエラーが発生し、理由がわかりません:

POST の呼び出しエラーhttps://www.googleapis.com/upload/drive/v1/files?uploadType=multipart : (403) 認証されたユーザーは、クライアント ID {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'
));

?>

私が理解していることから、アプリケーションはユーザーに代わって Google ドライブ SDK のサービス アカウントを使用できます。これは、ユーザーに対する認証の質問 (許可の要求) がないということですか? では、アプリケーションはどのように自身を認証するのでしょうか? それとも私の理解が間違っているのでしょうか?ここで私を啓発するのを手伝ってください。

4

1 に答える 1

2

Drive SDK のセキュリティ モデルにより、サービス アカウントはサポートされていません。

私がお勧めするのは、ドライブのウェブ UI からアプリケーションでファイルを開き (または作成し)、OAuth 2.0 承認フローが完了した後に取得したアクセス トークンと更新トークンを保存することです。

cron ジョブからこれらの資格情報を取得するだけで、承認されたリクエストをユーザーに代わって Drive API に送信できます。

于 2012-05-03T17:31:19.140 に答える