【问题标题】:Scope drive.file inconsistency (404 on a publicly shared file)范围 drive.file 不一致(公开共享文件上的 404)
【发布时间】:2020-07-30 05:09:14
【问题描述】:

使用此范围 (var SCOPES = 'https://www.googleapis.com/auth/drive.file';) 会导致不一致。如果我尝试获取可公开访问的文件(由任何人在另一个 google 的驱动器上共享,状态为“每个有链接的人都可以看到”),我会收到 404 错误。见下文:

message: "File not found: 11Kf9Ch0f_Dbiw-g9BFjNz9C-qFOb1DMIucrt6J-Z-28."

使用其他范围 https://www.googleapis.com/auth/drive 有效,但它是 Google 不推广的受限范围。这对我来说毫无意义,因为即使通过简单的 js 请求也可以检索文件并且是公开的。

var SCOPES = 'https://www.googleapis.com/auth/drive'; // works as expected
var SCOPES = 'https://www.googleapis.com/auth/drive.file';  // throws 404
function getFile(id) {
        get_data = {'fileId': id,}
        var res3 = gapi.client.drive.files.get(get_data).then(
            function(res) {console.log(res);},
            function(err) {console.log(err);}
        );
}
getFile('11Kf9Ch0f_Dbiw-g9BFjNz9C-qFOb1DMIucrt6J-Z-28');

我被卡住了,因为我试图选择通用模板(比如我放在这里的带有 ID 的模板),并在我的特定应用程序的文件空间和 404 上编辑它们。

请参阅下面的链接,即使是匿名浏览器也可以访问: https://docs.google.com/document/d/11Kf9Ch0f_Dbiw-g9BFjNz9C-qFOb1DMIucrt6J-Z-28/view

【问题讨论】:

    标签: google-drive-api google-api-js-client


    【解决方案1】:

    不一致的地方在哪里? drive.file 范围专门用于由您的应用创建的文件,或您的应用在 Drive UI 中打开的文件。其目的是防止您的应用查看用户拥有的更广泛的文件集合。例如。如果我有一个在你的 Google Drive 中存储音频剪辑的应用,你不希望我的应用阅读你的文档和电子表格。

    您的两个解决方案是使用drive 范围,但通常会因为过于宽松而受到反对,或者要求您的用户使用您的应用打开文件。

    【讨论】:

    • 我明白,但是没有中间期限,而且能够如此轻松地在 gapi 之外获取文件并通过 API 卡住,这看起来是非常错误的,带有 404 的。我的 webapp 从共享文档中获取 soe 模板,并使用它们来创建用户版本。它还创建了与对等方共享的最终文档,并且与 drive.file 共享也失败,其他对等方(文档被共享给的人)无法通过 API 看到它,只能通过 Google Drive 页面查看。对我来说,这看起来不合逻辑,并且使得 drive.file 范围无法用于许多用例。
    • 总会有标准云端硬盘权限模型不适合的用例。对于这些情况,您需要创建一个服务器代理,该代理具有广泛的权限,您可以根据 ACL 模型进一步减少这些权限。
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多