【问题标题】:How to give my application access to a publicly shared Google Drive file如何授予我的应用程序访问公开共享的 Google Drive 文件的权限
【发布时间】:2020-12-28 08:38:50
【问题描述】:

我正在编写一个下载公开共享的 Google 云端硬盘文件的应用程序。我的应用程序已经知道它需要下载的文件的 ID。以下是我可以做到这一点的三种可能的方法,但没有一种是令人满意的:

1.) 使用 url https://drive.google.com/uc?id=<fileID>&export=download 下载文件是可行的,但会受到严格的速率限制,因为请求是在未经身份验证的情况下发送的。

2.) 使用https://www.googleapis.com/auth/drive.file 身份验证下载文件不起作用。这是因为documentation 表示它只提供对“应用程序创建或打开的文件”的访问。

3.) 使用https://www.googleapis.com/auth/drive 身份验证下载文件有效(无需对“drive.file”案例进行任何其他代码修改)。由于需要对使用此范围的应用程序进行安全评估,因此我无法使用此选项。

前进的唯一方法似乎是使用“drive.file”身份验证,这些文件由应用程序打开。我该怎么做?我认为Picker API 是从应用程序内部执行此操作的预期方式,但我看不到支持按特定文件 ID 过滤,我更喜欢不需要用户输入的解决方案,尤其是因为选项(1) 和 (3) 不需要用户输入。

(作为旁注,此安全策略背后的逻辑对我来说没有意义。如果(2)由于安全/身份验证问题而不可能,那么(1)应该是不可能的。如果(2 ) 由于速率限制问题是不可能的,那么 (3) 应该是不可能的。有人告诉我这是预期的行为。)

【问题讨论】:

    标签: google-api google-drive-api google-oauth google-authentication google-picker


    【解决方案1】:

    我了解到您正在开发一个网络应用程序,用于下载公开共享的云端硬盘文件。如果我的假设是正确的,那么你只需要实现一个 OAuth 2.0 协议。您可以关注basic steps 作为参考。 Here 是更深入的网络应用指南。如果您对这种方法有疑问,请随时问我。


    更新

    根据来自 Google 的 IssueTracker 回答,这是预期的行为。也就是说,您需要先在您的应用中打开公共文件,然后才能下载它。

    【讨论】:

    • 这就是我一直在做的; googleapis.com/auth/drive.file 是我在 OAuth2.0 过程中请求访问的可能范围之一。这个过程已经在我的代码中运行,因为 (3) 下载文件没有速率限制。我使用 drive.file 范围成功通过 OAuth2.0 进行身份验证,但下载公共 google 驱动器文件被阻止。
    • 你好@Geo! Here 您有一个如何在云端硬盘中下载文件的示例。要运行该示例,您需要能够读取该文件。为防止任何范围配置错误,请尝试使用 https://www.googleapis.com/auth/drive 范围运行之前的代码。如果此方法在您的场景中不起作用,请返回并分享错误消息。
    • 正如我在案例(3)中指出的那样,我已经这样做了,并且它有效。问题是我需要使用不受限制的范围,并且更改为任何不受限制的范围都会使此代码无法工作。我首先需要知道如何在我的应用程序中“打开”特定的驱动器文件。
    • 感谢您的澄清。当您说“更改为任何非限制范围会使此代码无法工作”时,问题是什么?请分享您收到的错误消息以及重现该情况所需的最少代码。
    • 这与我发现并报告的一个错误有关,因此您可以在此处查看示例代码:issuetracker.google.com/issues/167033280 他们确认这是故意行为,我需要“在我的应用程序”,以使这项工作。当我问如何做到这一点时,他们没有回应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多