Google云端硬盘SDK服务帐户错误“经过身份验证的用户尚未安装具有客户端ID的应用...”

时间:2012-05-03 07:03:37

标签: php google-drive-api

我正在尝试创建可以在后台运行的Google云端硬盘应用(例如cronjob),无需任何用户互动,使用Google Drive SDK服务帐户,但它给了我这个错误,我无法理解原因:

  

调用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 Drive SDK的服务帐户。这是否意味着用户没有身份验证问题(权限请求)?那么应用程序如何验证自己?或者我的理解可能是错的?请帮助在这里启发我。

1 个答案:

答案 0 :(得分:2)

由于其安全模型,Drive SDK不支持服务帐户。

我建议使用您的应用程序从Drive Web UI打开(或创建)文件,并存储检索到的访问权限并刷新OAuth 2.0授权流程完成后获得的令牌。

在您的cron作业中,只需检索这些凭据即可代表您的用户向Drive API发送授权请求。