在未经同意的情况下授权访问个人GoogleDrive屏幕

时间:2019-07-24 04:08:30

标签: php oauth google-drive-api google-api-php-client google-oauth2

我正在尝试通过cron作业将备份文件上传到GoogleDrive。

我面临的主要问题是我必须使用服务帐户来上传文件,因为据我了解, Oauth服务将需要使用同意屏幕< / em>显然不是cron作业的选择。

从现在开始,文件将被上传,而不是上传到我的个人驱动器,而是上传到“附加在google服务帐户上的电子邮件”某处的驱动器电子邮件,例如something@iam.gserviceaccount.com。没有gui(我可以找到)来管理上载到该虚假帐户的文件(也许如果我拥有gsuite,这会有所不同吗?)。但是,我可以通过api访问它并以这种方式进行管理。

我最终要做的是使用api创建一个文件夹,并将所有备份文件放在该父文件夹中。该文件夹本身是通过以下方式创建/与我的个人驱动器共享的:

public function makeFolder($folder, $opts = []) {
    if (($id = $this->folderExists($folder))) {
        return $id;
    }
    $fileMetadata = new Google_Service_Drive_DriveFile([
        'name' => $folder,
        'mimeType' => $this->folderMime
    ]);
    $folder = $this->service->files->create($fileMetadata, array('fields' => 'id'));
    if (isset($opts['email'])) {
        $userPermission = new Google_Service_Drive_Permission(array(
            'type' => 'user',
            'role' => 'writer',
            'emailAddress' => $opts['email'] //my email/drive something@gmail.com
        ));
        $this->service->permissions->create($folder->id, $userPermission, array('fields' => 'id'));
    }
    return $folder->id;
}

我现在可以在个人驱动器的“与我共享”下管理文件夹中的文件。我无法永久删除文件,并且普遍缺乏“所有权”是不理想的。

在给定参数的情况下,是否还有更简化的方法?在理想情况下,该api类似于dropbox的api,该api本质上为您提供了访问令牌,以完全使用规避同意屏幕。

enter image description here

我正在使用google client api的最新版本。

1 个答案:

答案 0 :(得分:0)

看看OAuth refresh tokens。当用户授权您的应用程序时,您会收到一个访问令牌和一个刷新令牌。访问令牌用于授权API调用,刷新令牌用于获取新的访问令牌。因此,这将使您每次运行cron作业时都生成一个访问令牌,但是用户只需输入一次身份验证详细信息。刷新令牌确实会过期,但这通常是在很长较长的时间之后。