Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无需OAuth2重定向/复制和粘贴即可访问专用Google驱动器数据_Javascript_Node.js_Google Api_Google Oauth_Google Authentication - Fatal编程技术网

Javascript 无需OAuth2重定向/复制和粘贴即可访问专用Google驱动器数据

Javascript 无需OAuth2重定向/复制和粘贴即可访问专用Google驱动器数据,javascript,node.js,google-api,google-oauth,google-authentication,Javascript,Node.js,Google Api,Google Oauth,Google Authentication,我正在制作一个开源节点模块,需要访问每个用户的私有Google驱动器文件。我一直试图对所有这些不同的身份验证类型进行思考,但遇到了一个障碍。根据我收集的信息,有两种主要的身份验证类型 一、 库作者,在我的库中提供使用OAuth2对每个用户进行身份验证所需的公钥和私钥。这意味着给他们一个可以访问的URL,给我的应用程序访问他们数据的权限,并让他们将访问代码复制并粘贴回他们的终端。我能够运行教程并使其工作,但这种方法似乎很危险,因为我必须将密钥打包到我的库中,而且不必要地困难 让用户转到Google

我正在制作一个开源节点模块,需要访问每个用户的私有Google驱动器文件。我一直试图对所有这些不同的身份验证类型进行思考,但遇到了一个障碍。根据我收集的信息,有两种主要的身份验证类型

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

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


  • 2听起来好多了:这个库一旦在用户手中,就与我毫无关系,所以让他们向我进行身份验证感觉不正确。但据我所知,使用谷歌API实现这一点的唯一方法是创建一个谷歌服务帐户,下载他们提供给你的JSON,通过一个类似于博客帖子顶部评论的流程,然后手动让服务帐户通过电子邮件访问我的个人谷歌驱动器文件。这似乎有点骇人听闻,要想访问我自己的私人数据需要做很多工作。有没有更好的办法?我觉得奇怪的是,其他API中的这种相当标准的流只能通过服务帐户在Google的API中使用,但也许有一种方法,我只是看不到而已。我对身份验证相当陌生,因此非常感谢您的帮助。谢谢

    首先,我想说的是,你不能用你在谷歌开发者控制台上创建的客户端id和客户端机密来发布你的开源项目,这是违反的

    1.开发人员凭据(如密码、密钥和客户端ID)旨在供您使用并标识您的API客户端。你会保持 您的凭据必须保密,并尽合理努力防止 并阻止其他API客户端使用您的凭据。 开发人员凭据不能嵌入到开源项目中

    关于在中公开客户端id的另一个问题的答案

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

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


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

    我如何让每个用户使用OAuth2?我以为OAuth2就是我给他们一个Url的地方,那个Url上写着“给Weston做x、y和z的权限”。但是如果url中没有给出我的凭据,那有什么意义呢?有没有一种不用复制粘贴url就可以通过OAuth2进行身份验证的方法?当他们下载你的项目时,必须给他们一个配置文件,或者给他们一个可以从Google开发者控制台添加他们自己凭据的地方。所以这将是相同的流程(给他们一个url,他们复制并粘贴回控制台),但是OAuth屏幕只会说“允许我做x、y和z”?必须这样做似乎很奇怪,我认为有一种方法可以通过编程来完成所有这些,就像在服务帐户流中一样。如果他们只想访问自己的数据,请使用服务帐户。我只是觉得驱动器上的服务帐户很痛苦,因为您必须与服务帐户共享一个文件夹,然后处理权限问题。这是个人的选择,两种选择都可以。然而,如果您使用的是JavaScript,而不是服务器端编程语言,那么您将很难让服务帐户正常工作。出于安全原因,这是一个坏主意,虽然有些人入侵了它,但我个人永远不会使用它。使用Node和其他服务器端编程语言有什么区别?此外,该库很可能不会上载任何内容,因此权限问题可能不会是什么大问题。对我来说,在不必要的url复制和粘贴内容(只有在web应用程序中才有必要)和服务帐户权限内容之间进行选择似乎太奇怪了。您可能认为服务帐户流有一个选项,即只加载一个JSON文件并进行身份验证,但可以访问您的个人数据。