授权命令行工具使用Google API(通过OAuth2.0或其他方式)

kupeojn6  于 2023-11-16  发布在  Go
关注(0)|答案(1)|浏览(141)

我 * 认为 * 我理解OAuth 2.0在移动的应用程序或网站的上下文中是如何工作的--我的情况也不是这样。
我有一个C++命令行应用程序,我想给予访问其中一个谷歌服务(Google Fusion Tables),但我认为这个问题适用于任何谷歌服务,或者见鬼,也许也任何命令行应用程序,必须处理OAuth2。
我有用户名。我有密码(用户输入的)。我需要一个令牌,这样我就可以通过Curl拨打电话。完成此任务的最简单方法是什么?

更新一:

在浏览了文档之后,似乎最不痛苦的OAuth2流将是"Installed Application"流。
我在想的是,我的命令行工具将在不需要令牌的情况下对公共表进行请求(但似乎我们仍然需要从Google发送一个AppID,我可以从Google API Jmeter 板获得)。
每当我的命令行工具需要使用私有资源时,该用户都需要提供Google提供的 * 授权代码 *(我的命令行工具可以使用它来获得可用的 token)。如果用户没有在命令行中提供 * 授权代码 *,我的工具只会打印一个链接,用户可以将其粘贴到URL以生成授权代码。链接看起来像这样:
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/fusiontables&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com
一旦用户接受,她必须将 * 授权代码 * 粘贴到终端,以便命令行工具可以使用它。命令行工具将使用授权代码向Google请求 * 令牌 *,然后,最后,我可以使用Google令牌进行API调用。
有几件事我还不清楚。授权代码是否更改?如果是,似乎我需要保存令牌并在某个地方刷新令牌,以便每次令牌过期时可以重用刷新令牌。
是只有我,还是整个事情看起来像疯狂的谈话,只是为了让我可以使用谷歌API从命令行?
我通常会使用ClientLogin flow,但一切似乎都指出,它将很快被弃用。

qjp7pelc

qjp7pelc1#

回答您关于“已安装应用程序”流程的问题:

授权码只有效一次,当您交换后,得到刷新令牌访问令牌后,就不能再使用了。您只需将其转储即可。该授权码只使用一次,您不再需要它。您需要做的只是将刷新令牌保存/保存/持久化到某个本地文件中,以便重复使用。
刷新令牌重要的令牌。它为您提供了无限期访问API的权限,因为您可以使用它以编程方式获取新的访问令牌**(有效期为1小时)。请查看刷新令牌文档了解该操作。

Google API客户端库通常会自动透明地为您处理令牌刷新,但由于我们没有C++客户端库,因此您需要自己执行此操作。(表示无效的访问令牌),在这种情况下,我们进行刷新以获得新的访问令牌,然后自动重试最初失败的操作。

我的建议:

流,这将给你给予最好的用户体验是使用服务器端的Web应用程序流.它可以使用它安装和/或命令行应用程序,虽然它是更多的工作.这里是如何:
1.在用户机器上启动一个本地web服务器,监听空闲端口(例如:http://127.0.0.1:7777
1.生成一个Web浏览器窗口(或将其嵌入您的应用),将用户重定向到Google OAuth 2.0授权页面,并将重定向URI设置为http://127.0.0.1:7777
1.当用户赠款应用程序访问权限时,它将被重定向到您的服务器,侦听http://127.0.0.1:7777
1.在您的本地Web服务器上,您可以获取URL查询参数中的身份验证代码。
1.关闭您在步骤1中启动的本地Web服务器
1.杀死/关闭您在步骤2中生成的浏览器示例
就这样,你现在有了刷新和访问令牌(从步骤4开始),在杀死浏览器后,你又回到了你的应用程序中。

Why All this mess?

客户端登录已被弃用。它将消失,并且不适用于新的API。Google不希望用户给予您密码,因为您可能会忍不住存储它,并且可能会被黑客入侵:))此外,它给你提供了太多的信息,因为你可以用他们的谷歌结账账户购买东西,或者修改他们的密码来窃取他们的账户。目前,从安全的Angular 来看,唯一的办法就是使用这三个-像OAuth2这样的legged auth系统,并不鼓励使用密码,这样用户就可以摆脱向第三方提供用户名和密码的习惯。当然,OAuth2很难用于桌面/命令行应用程序。

OOB替代方案

编辑:此流程has been deprecated by Google
如果你不想或不能启动Web服务器来监听代码,那么你可以使用oob OAuth流。它的工作原理是简单地指定oob作为重定向URI。在这种情况下,而不是被重定向到给定的URL,用户将看到一个页面,上面写着“这是你的授权代码。复制粘贴到你的应用程序中。”.在您的应用程序上,您可以简单地让您的用户在文本字段中粘贴认证代码,瞧.这是一个更糟糕的用户体验,但在某些情况下可以更强大,并在更多的环境中工作,特别是低技术环境.
请注意,并非所有OAuth 2提供商都支持这一点,但至少Google和Facebook支持。

相关问题