【问题标题】:How to access the same files list through Google Drive's API as Google's API Explorer?如何通过 Google Drive 的 API 访问与 Google 的 API Explorer 相同的文件列表?
【发布时间】:2018-12-25 20:18:56
【问题描述】:

使用 Google Drive 的 API,我可以获得授权和令牌,但在尝试获取文件列表时,API 当前仅返回一个项目:名为“Getting Started”的 PDF。据推测,这是刚刚建立的 Google Drive 中的默认项目——该项目早已从我们正在使用的预期 Google Drive 帐户中删除。

同时使用 API Explorer (https://developers.google.com/apis-explorer) 返回数百个项目,这些项目实际上代表相关帐户的 Google Drive。

API Explorer 说它发送的请求是:

GET https://www.googleapis.com/drive/v3/files?corpus=user&pageSize=100&key={YOUR_API_KEY}

发送直接返回“权限不足”错误,这是有道理的:它是 api_key,而不是 access_token 将&key=&access_token= 切换确实会返回一个文件列表,但其中唯一的项目是上面提到的“入门”PDF。

API 和 Explorer 之间的差异给人的印象是……

a) 每个都引用不同的帐户,或

b) API 控制台 (https://console.developers.google.com) 中授予的权限/范围/访问权限比资源管理器窄

关于 a) 每个都引用不同的帐户:不太可能。这些凭据都是在登录到用于运行 API Explorer 的同一 Google 帐户时在 API 控制台中创建的。

关于 b) 权限/范围/访问在某种程度上有所不同:可能性更大,但目前尚不清楚如何或如何调整以产生影响。

发送的 cURL 调用:

curl https://www.googleapis.com/drive/v3/files?corpus=user&pageSize=100&key={YOUR_API_KEY} (NG.  Needs a token)
curl https://www.googleapis.com/drive/v3/files?corpus=user&pageSize=100&access_token={recently_obtained_token} (this works, but returns only one item -- the "Getting Started" PDF)

回归:

{"kind": "drive#fileList", "incompleteSearch": false, "files": [{"kind": "drive#file", "id": "XXXX", "name": "Getting started", "mimeType": "application/pdf"}]}

此处列出了用于达到此目的的授权和令牌步骤... How to connect to the Google Drive API using cURL?

根据这篇文章 (Access Google Drive API Returns Empty File List) 使用的范围确实是https://www.googleapis.com/auth/drive 在同一链接下,kvzrock 的一个答案建议给予“服务帐户电子邮件地址的许可” 几个链接:

Google Drive API, Oauth and service account

How do I authorise an app (web or installed) without user intervention?

但是还不能理解这些。

【问题讨论】:

    标签: curl google-api google-drive-api service-accounts


    【解决方案1】:

    听起来您使用了服务帐户,因此您使用的凭据以及您看到的一个文件属于服务帐户,而不是您的用户帐户。一些确认方法:-

    1. 检查文件的创建日期。如果它与您生成凭据的日期相同,则它是一个服务帐户。
    2. 检查文件的所有者。
    3. 获取关于资源https://developers.google.com/drive/api/v3/reference/about

    不幸的是,Google 文档导致人们得出结论,服务帐户是绕过 OAuth 以获取您的文件的便捷方式,而它应该用大红色字母表示“服务帐户是 NOT您认为的帐户有!!!”

    您有 2 个选择:- 1. 使用服务帐户共享您要访问的所有文件 1. 停止使用服务帐户,并按照您发布的最后一个链接 (How do I authorise an app (web or installed) without user intervention?) 中的步骤直接访问您的常规帐户

    【讨论】:

    • 谢谢。会调查的。
    【解决方案2】:

    如何通过 Google Drive 的 API 访问与 Google API Explorer 相同的文件列表?

    由于您使用的是服务帐户,这将非常困难。服务帐户不是您,服务帐户是拥有自己的谷歌驱动器帐户的虚拟用户。目前其驱动器帐户仅包含一个文件。 "Getting Started".

    Google apis explore 允许您使用 Oauth2 登录您的个人 google drive 帐户。这是一个不同的授权流程,它要求用户登录到他们的谷歌帐户并同意应用程序访问他们的数据。这使您可以访问您的 Google Drive 帐户。

    服务帐号是一种不同类型的授权流程。流程中的凭据用于登录服务帐户用户,这只能在服务器端完成。服务帐户身份验证无法在客户端完成。服务帐户的诀窍在于它们可以被预先授权。因此,您可以授予服务帐户对数据的访问权限,并且当它登录时,它不需要像正常的 Oauth2 流程那样同意访问。因此,您可以与服务帐户共享您个人 google drive 帐户上的文件和目录。这是通过获取服务帐户电子邮件地址并与任何其他用户一样与其共享文件或目录来完成的。然后服务帐户将有权访问该文件或目录。

    现在,因为我说很难从 Google API 资源管理器中获得准确的响应。无法与其他任何人共享您的根文件夹。如果您希望服务帐户具有完全访问权限和相同的响应,那么您将不得不与服务帐户共享根文件夹中的每个目录以及 google 驱动器帐户根目录中的每个文件。您添加的任何新文件或文件夹都必须与服务帐户共享。

    【讨论】:

    • 再次感谢。超级清晰。你说服了我:放弃服务帐户方法。
    • 这取决于你在做什么服务帐户有其用途。但是,如果您尝试访问其他用户的数据而不是您个人控制的驱动器帐户,那么使用服务帐户可能不是最好的主意。
    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多