在没有 OAuth2 redirection/copy 的情况下访问私有 Google 驱动器数据并粘贴

Accessing private Google Drive data without OAuth2 redirection/copy and pasting

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

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

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

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

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

1.Developer credentials (such as passwords, keys, and client IDs) are intended to be used by you and identify your API Client. You will keep your credentials confidential and make reasonable efforts to prevent and discourage other API Clients from using your credentials. Developer credentials may not be embedded in open source projects.

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

其次,您可以指示您的用户使用 Oauth2 或服务帐户,或者两者都由您决定。

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

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