Google Drive API无法访问用户数据

时间:2015-02-18 15:40:26

标签: php google-drive-api

我正在学习Drive API并且已经阅读了所有这些文档。我只是想进行一次经过身份验证的调用来列出驱动器中的文件。

这是针对不需要用户身份验证的内部应用程序,我只需要访问我们公司的驱动器。所以“服务帐户”听起来是正确的。

这是我到目前为止所做的事情

这是我列出文件的代码

<?php

    ini_set('display_errors',1);
    ini_set('display_startup_errors',1);
    error_reporting(-1);

    require_once 'google-api-php-client/autoload.php';

    $client_id = '...'; //Client ID
    $service_account_name = '...'; //Email Address
    $key_file_location = '...'; //key.p12

    $client = new Google_Client();
    $client->setApplicationName("...");

    $service = new Google_Service_Drive($client);

    if (isset($_SESSION['service_token'])) {
        $client->setAccessToken($_SESSION['service_token']);
    }

    $key = file_get_contents($key_file_location);
    $cred = new Google_Auth_AssertionCredentials(
        $service_account_name,
        array('https://www.googleapis.com/auth/drive','https://www.googleapis.com/auth/drive.file'),
        $key
    );
    $client->setAssertionCredentials($cred);
    if ($client->getAuth()->isAccessTokenExpired()) {
      $client->getAuth()->refreshTokenWithAssertion($cred);
    }
    $_SESSION['service_token'] = $client->getAccessToken();

    $results = $service->files->listFiles();

    debug($results);

?>

我的结果是一个名为“如何开始使用云端硬盘”的文件。很明显,它不是通过我的帐户进行身份验证来显示我的驱动器文件。

知道如何将此服务帐户与我的云端硬盘帐户相关联,以便获取文件列表吗?

1 个答案:

答案 0 :(得分:1)

正如您所发现的,您正在列出服务帐户的云端硬盘中的文件。服务帐户可以被视为具有自己的云端硬盘的用户,并且不会与您的用户帐户绑定。

如果要访问其他用户的文件,则必须执行以下操作之一:

  1. 让用户与服务帐户共享文件
  2. 以该用户身份验证,而不是服务帐户
  3. 如果您是域的一部分,请拥有域管理员委派此服务帐户的权限,以访问该域的所有用户的文件:https://developers.google.com/drive/web/delegation