【问题标题】:Accessing private Google Drive data without OAuth2 redirection/copy and pasting无需 OAuth2 重定向/复制和粘贴即可访问私有 Google Drive 数据
【发布时间】:2016-10-16 02:37:54
【问题描述】:

我正在制作一个开源 Node 模块,它需要访问每个用户的私有 Google Drive 文件。我一直在尝试解决所有这些不同的身份验证类型,但遇到了障碍。根据我收集到的信息,有两种主要的身份验证类型

  1. 我,图书馆作者,在我的图书馆中提供了使用 OAuth2 对每个用户进行身份验证所需的公钥和私钥。这意味着给他们一个 URL 以允许我的应用程序访问他们的数据,并让他们将访问代码复制并粘贴回他们的终端。我能够通过this 教程运行并让它工作,但这种方法似乎很危险,因为我必须与我的库打包密钥,并且不必要地困难。

  2. 让用户进入 Google API 控制台,获取他们自己的 API 密钥,并通过某种配置文件将其提供给我的库。没有 URL 重定向,没有复制和粘贴,只有一些只有他们才能访问的私有凭据。

2 对我来说听起来好多了:这个库一旦在用户手中就与我完全无关,所以让他们与我进行身份验证感觉不正确。但据我所知,使用 Google 的 API 执行此操作的唯一方法是创建一个 Google 服务帐户,下载他们提供给您的 JSON,通过类似于 this 博客文章的顶部评论的流程,然后手动授予服务帐户电子邮件访问我的个人 Google Drive 文件的权限。这似乎很老套,并且需要做很多工作才能访问我自己的私人数据。有没有更好的方法来解决这个问题?我觉得奇怪的是,其他 API 中的这种相当标准的流程只能通过服务帐户在 Google 的 API 中使用,但也许有一种方法,我只是没有看到。我对身份验证相当陌生,因此非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: javascript node.js google-api google-oauth google-authentication


    【解决方案1】:

    首先我想说的是,您不能使用您在 Google Developers 控制台上创建的客户端 ID 和客户端密码发布您的开源项目,这违反了googles terms of service

    1. 开发者凭据(例如密码、密钥和客户端 ID)旨在供您使用并识别您的 API 客户端。你会保持 您的凭据保密,并采取合理措施防止 并阻止其他 API 客户端使用您的凭据。 开发人员凭据可能不会嵌入到开源项目中。

    我对另一个关于在 open source projects 中公开客户 ID 的问题的回答。

    其次,您可以指示您的用户使用 Oauth2 或服务帐户或两者,这完全取决于您。

    如果用户只访问他们自己的数据而不需要访问其他人的数据,那么他们可以使用服务帐户,您需要指导他们如何与服务帐户共享 Google 云端硬盘上的文件夹。但是,从您的角度来看,上传权限时可能会很棘手,服务帐户将拥有上传到用户谷歌驱动器帐户的文件,您需要让服务帐户为用户添加权限,这样用户也可以访问说文件。

    当代码上传文件由经过身份验证的用户拥有时,最简单的方法是 Oauth2,这样您就不会遇到与服务帐户相同的权限问题。

    【讨论】:

    • 如何让每个用户都使用 OAuth2?我认为 OAuth2 将是我给他们一个 Url 的地方,那个 url 上写着“给 Weston 做 x、y 和 z 的权限”。但是,如果不是我在 url 中给出的凭据,那有什么意义呢?有没有办法通过 OAuth2 进行身份验证而无需复制和粘贴 url 的东西?
    • 当他们下载您的项目时,他们必须获得一个配置文件或某个地方,他们可以在其中从 Google 开发者控制台添加自己的凭据。
    • 所以这将是相同的流程(给他们一个 url,他们复制并粘贴回控制台),但 OAuth 屏幕只会显示“授予 [我自己] 执行 x、y 和z”?必须这样做似乎很奇怪,我认为有一种方法可以以编程方式完成所有这些工作,例如在服务帐户流程中。
    • 如果他们只打算访问自己的数据,请务必使用服务帐户。我只是发现驱动器上的服务帐户很痛苦,因为您必须与服务帐户共享一个文件夹,然后处理权限问题。这真的是个人选择,这两个选项都可以。但是,如果您使用的是 JavaScript 而不是服务器端编程语言,您将很难让服务帐户正常工作。出于安全原因,这是一个坏主意,虽然有些人已经破解了它,但我个人永远不会使用它。
    • 使用 Node 和其他一些服务器端编程语言有什么区别?此外,这个库很可能不会上传任何东西,所以权限问题可能不会是什么大问题。对我来说,不得不在不必要的 url 复制和粘贴内容(如果这是一个 Web 应用程序时才真正需要)和服务帐户权限的内容之间做出选择,这似乎很奇怪。您可能认为服务帐户流程可以选择仅加载 JSON 文件并对其进行身份验证,但可以访问您的个人数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多