【问题标题】:Oauth2 Google Drive offline access not working for non-google app files?Oauth2 Google Drive 离线访问不适用于非谷歌应用文件?
【发布时间】:2014-02-03 03:26:23
【问题描述】:

Google Drive API 遇到一个非常令人沮丧的问题。

这是一个 Google App Engine Java 环境。

我需要根据离线权限下载文件 - 文件与授予离线权限的用户共享(“可以编辑”)。我请求完整的https://www.googleapis.com/auth/drive 范围。我存储了这个生成的刷新令牌。

然后,应用程序使用此刷新令牌来获取访问令牌,用于尝试下载文件。如果文件是 Google Apps 文件(Google 文档、电子表格等),则此文件有效,但如果文件是包含内容的上传文件(例如 PDF 文件、Word 文件等),则返回 401。我可以通过在共享 URL 中附加 ?access_token=xxxx 来简单地确认这一点 - 这适用于 Google Apps 文件,但不适用于上传的普通文件,该文件在 webcontentlink url 上是 401。请注意,https://www.googleapis.com/drive/v2/files/ 端点使用访问令牌正确响应上传文件的元数据,该访问令牌随后在下载调用中失败。

来自直接 url 调用(使用 access_token=)或 servlet 调用的完整 html 响应是

<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

云端硬盘中的非原生文件的离线 Google 身份验证是否存在已知问题?

【问题讨论】:

    标签: google-drive-api google-oauth


    【解决方案1】:

    根据descriptions of file attributes,您可能应该使用downloadUrl 属性而不是webContentLink。

    downloadUrl - 文件的短期下载 URL。这仅适用于内容存储在云端硬盘中的文件。

    webContentLink - 用于在浏览器中下载文件内容的链接使用基于 cookie 的身份验证。如果内容是公开共享的,则无需任何凭据即可下载内容。

    【讨论】:

    • 我开始认为你是对的。看起来下载 url 将与访问令牌一起使用(使用 url 参数或在标头中)。这对于我的特定应用程序来说并不理想,因为我想存储 url 以供以后检索。假设 downloadurl 确实是短暂的,我将不得不存储文件 id 并调用以获取 downloadurl,然后进行下载。我一直在这附近的房子周围,但我认为这可能是答案 - 谢谢:D
    • 只是为了后代,我说 downloadurl 链接将与 access_token= 参数一起使用是不正确的,它仅适用于标头中设置的授权。
    猜你喜欢
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多