我有一个应用程序,我的应用程序的用户可以上传/下载文件,我不希望他们每次想要上传文件时都要授权。所以我开始知道服务帐户是解决方案,这正是我一直在寻找的。我按照这一页给出的说明做了:
https://developers.google.com/drive/service-accounts一切都很好,但问题是限制,即只有5GB,是否有任何办法,我可以购买一些额外的存储为我的服务帐户(它提到它不能做,但我仍然只是想确认)。我不想使用web服务器流,在那里我保存凭据即访问令牌,每次到期时刷新令牌。我的问题有解决办法吗?
将您的normal帐户的文件夹共享到您的Service帐户。
您的服务帐户地址看起来像XXX@XXX.iam.gserviceaccount.com。
然后,您的服务帐户可以从您的正常帐户看到共享文件夹。
现在您的服务帐户可以获得正常帐户的额外存储空间。
将文件存储在您自己的google drive帐户而不是google drive的服务帐户中的解决方案是在您的google developer控制台中授予您的服务帐户的所有者权限。
然后在你的个人谷歌驱动器中创建一个文件夹,并获取该文件夹的id。
当你使用服务帐户上传文件时确保将文件夹id作为你上传文件的父id,就像这样
$file = new Google_Service_Drive_DriveFile();
$file->title = "Automata";
$parent = new Google_Service_Drive_ParentReference();
$parent->setId('Your Folder id');
$file->setParents(array($parent));
$requestss = $drive_service->files->insert($file,array(
'data' => $data,
'mimeType' => 'application/pdf',
));
$permission = new Google_Service_Drive_Permission();
$permission->setRole( 'writer' );
$permission->setType( 'anyone' );
$permission->setValue( 'youraccount@gmail.com' );
$drive_service->permissions->insert( $requestss->getId(), $permission );
现在你可以上传文件到你自己的google drive,而不是服务帐户驱动器
希望能有所帮助
看一下域范围委托。它使服务帐户能够冒充组织内的人类用户,并代表他们发出请求。我已经成功地以我自己的身份上传了一个文件到我们组织的驱动器中的用户文件夹,但是使用了服务帐户的凭据。
https://developers.google.com/identity/protocols/oauth2/service-account delegatingauthority
此外,如果你的应用程序只管理自己创建的文件,避免使用…/auth/drive作用域,因为它的特权太大了。使用…/认证/驱动器。文件。我觉得很遗憾,谷歌的安全基础设施是如此复杂。大多数web服务仍然使用常规的API令牌,我知道这是非常不安全的。他们试图提高标准是件好事,但谷歌似乎对简化它的文档不感兴趣。
看一下:
https://developers.google.com/drive/service-accounts服务帐户不能购买额外的存储空间,所以你需要使用普通的Google帐户。