当前位置: 首页 > 知识库问答 >
问题:

Google Drive API无法访问用户数据

齐浩淼
2023-03-14

到目前为止,我正在学习驱动器API并阅读了所有这些文档。我只是想打一个经过身份验证的电话列出驱动器中的文件。

这是一个内部应用程序,不需要用户授权,我只需要访问我们公司的驱动器。因此,“服务账户”听起来是正确的。

这是我目前所做的

  • 在Google Developer Console中创建了一个应用程序
  • 同时启用Drive API和Drive SDK
  • 下载并存储了我的p12密钥
  • 在Google App Admin的高级设置下添加了我的客户端ID和驱动器权限,如下所述https://developers.google.com/accounts/docs/OAuth2ServiceAccount

这是我列出文件的代码

<?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);

?>

我的结果是一个名为“如何开始使用Drive”的文件。所以很明显,它不是用我的帐户验证来显示我的驱动器文件。

任何想法如何获得这个服务帐户与我的驱动器帐户,所以我可以得到一个文件列表?

共有1个答案

鄢选
2023-03-14

正如您所发现的,您列出了服务帐户驱动器中的文件。服务帐户可以被认为是一个拥有自己驱动器的用户,它与您的用户帐户无关。

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

  1. 让用户与服务号共享文件
  2. 验证为该用户而不是服务帐户
  3. 如果您是域的一部分,请让域管理员授权此服务号访问该域所有用户的文件:https://developers.google.com/drive/web/delegation
 类似资料:
  • 问题内容: 我想在docker上运行jenkins并更改用户访问权限,以便可以读取SSH密钥并访问git。这是dockerfile的示例 生成时输出成功,访问已更改! 但是,当我进入访问设置为默认时,chmod无法正常工作 知道为什么这种行为吗? 问题答案: 发生这种情况是因为在基本映像中进行了定义。您可以通过3种方式中的任何一种来解决此问题 您可以在构建之前在主机上修复权限,它应该可以工作。 您

  • 我有一个Xamarin。窗体使用Azure ADB2C身份验证的应用程序。虽然我可以在工作中进行签名,但我仍然需要以某种方式获取用户信息(如用户名和存储在AAD中的其他属性),以便在应用程序中显示它。为了实现这一目标,我找不到任何合适的留档。还有谁有类似的问题或者知道我应该找什么吗?

  • 我使用启动了mongo,但是我得到了如下所示的错误消息。 我试图使用,但得到如下所示的错误消息。 但是当我尝试时,我可以在集合中显示用户,而不会出现任何错误消息。

  • 我目前正在实施一项功能,您可以保存我的iOS应用程序上显示的歌曲(使用Swift编写),此保存按钮允许将歌曲附加到用户的Spotify库中。根据Spotify开发者指南,此功能所需的唯一范围是在向用户授权应用程序时对用户库进行修改。要打开的url如下所示: https://accounts.spotify.com/authorize/?client_id=my_client_id 这一切都是完美的

  • 我无法访问节点中的帖子数据。js应用。我也在用express。 app.js: HTML: