Curl 如何通过Google Drive访问相同的文件列表';将API命名为Google';s的API浏览器?

Curl 如何通过Google Drive访问相同的文件列表';将API命名为Google';s的API浏览器?,curl,google-api,google-drive-api,service-accounts,Curl,Google Api,Google Drive Api,Service Accounts,使用GoogleDrive的API,我可以获得授权和令牌,但在尝试获取文件列表时,API当前只返回一项:名为“Getting Started”的PDF。这大概是刚刚建立的Google Drive中的默认项——一个早就从我们正在使用的Google Drive帐户中删除的项 同时,使用apiexplorer()返回数百个项目,事实上,这些项目代表了有关帐户的googledrive API Explorer表示它发送的请求是: GET https://www.googleapis.com/drive/

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

同时,使用apiexplorer()返回数百个项目,事实上,这些项目代表了有关帐户的googledrive

API Explorer表示它发送的请求是:

GET https://www.googleapis.com/drive/v3/files?corpus=user&pageSize=100&key={YOUR_API_KEY}
发送该消息会直接返回“权限不足”错误,这是有道理的:这是api_密钥,而不是access_令牌 使用
&access\u token=
切换
&key=
,确实会返回一个文件列表,但其中唯一的一项是上面提到的“入门”PDF

API和浏览器之间的差异给人的印象是

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

b) API控制台()中授予的权限/范围/访问权限比资源管理器中的权限/范围/访问权限窄

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

关于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"}]}
此处列出了用于达到此目的的授权和令牌步骤。。。

按此帖() 使用的范围确实是
https://www.googleapis.com/auth/drive
在同一链接下,一位kvzrock的回答建议给予“服务帐户的电子邮件地址权限” 关于这一点的几个链接:


但是还没有理解这些内容。

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

  • 检查文件的创建日期。如果与生成凭据的日期相同,则为服务帐户
  • 检查文件的所有者
  • 获取关于资源的信息
  • 不幸的是,Google文档让人们得出这样的结论:服务帐户是绕过OAuth访问您的文件的一种方便方式,而它应该用大红字写着“服务帐户是而不是您认为存在的帐户!!!”

    您有两种选择:- 1.与服务帐户共享您要访问的所有文件 1.停止使用服务帐户,按照您发布的最后一个链接()中的步骤直接访问您的常规帐户

    如何通过谷歌驱动器的API访问与谷歌API浏览器相同的文件列表

    由于您使用的是服务帐户,这将是非常困难的。服务帐户不是你的服务帐户是一个虚拟用户,有自己的谷歌驱动器帐户。当前,其驱动器帐户仅包含一个文件<代码>“入门”

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

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


    现在,为了解释为什么我说很难从GoogleAPIsExplorer获得准确的响应。无法与其他人共享您的根文件夹。如果您希望服务帐户具有完全访问权限和相同的响应,那么您必须与服务帐户共享根文件夹中的每个目录以及google drive帐户根目录中的每个文件。您添加的任何新文件或文件夹都必须与服务帐户共享。

    再次感谢。超级清晰。你说服了我:放弃服务帐户的方法。这完全取决于你在做什么,服务帐户有它们的用途。但是,如果您试图访问其他用户的数据,而不是您个人控制的驱动器帐户,那么使用服务帐户可能不是最好的主意。谢谢。我会调查的。