授权命令行工具消耗Google API(通过OAuth2.0或其他任何内容)



i think 我了解oauth 2.0在移动应用或网站的上下文中的工作方式 - 我的情况也不是。

我有一个C 命令行我想访问Google服务之一(Google Fusion Tables),但我认为这个问题适用于任何Google服务,或者也许还必须处理OAuth2的任何命令行应用。

我有用户名。我有密码(用户键入它)。我需要获取一个令牌,以便可以通过卷发打电话。什么是最简单的方法?

更新1:

浏览文档后,似乎最小痛苦的OAuth2流将是"已安装应用程序"。

我想的是,我的命令行工具将在不需要令牌的情况下向公共桌子提出请求(但似乎我们仍然需要从Google那里发送我可以从Google APIS仪表板上获得的appid)。p>每当我的命令行工具需要使用私有资源时,将需要该用户提供google提供的授权代码(然后我的命令行工具可以使用该范围来获取可用

回答有关"已安装应用程序"流的问题:

授权代码仅有效一次。交换后 - 并获得了刷新令牌访问令牌 - 它将不再可用。只需丢弃它。它仅一次性使用,您不再需要它。您需要做的就是只保留/保存/持续刷新令牌在某些本地文件中以进行重复使用。

刷新令牌重要令牌。它使您可以在无限的时间段内访问API,因为您可以使用它来编程获取新的访问令牌(有效的1H)。检查有关该操作的刷新令牌。

Google APIS客户端库通常会自动透明地处理刷新令牌,但是由于我们没有C 客户端LIB,因此您需要自己执行此操作。我们使用的一种技术是,我们在向API请求时捕获403个错误(这表示无效的访问token ),在这种情况下,我们会进行刷新以获取新的访问token ,然后自动重试最初失败的操作。

我的建议:

将为您提供最佳用户体验的流量是使用服务器端Web应用程序流。尽管它是更多的工作,但可以在安装和/或命令行应用程序上使用它。这是:

  1. 在用户的计算机上启动本地Web服务器收听免费端口(例如:http://127.0.0.1:7777
  2. 生成Web浏览器窗口(或将其嵌入您的应用程序)将用户重定向到Google OAuth 2.0授予页面,并将重定向URI设置为http://127.0.0.1:7777
  3. 当用户授予应用程序访问时,将其重定向到您的服务器,请通过http://127.0.0.1:7777
  4. 在您的本地Web服务器上,您可以获得URL查询参数中的验证代码。您现在可以交换验证代码,以供您坚持的访问和刷新代币
  5. 杀死/关闭您在步骤1中启动的本地Web服务器
  6. 杀死/关闭您在步骤2中产生的浏览器实例

就是这样,您现在拥有刷新和访问令牌(从步骤4开始),然后在杀死浏览器后又回到应用程序中。

为什么所有这些混乱?

客户登录已弃用。它消失了,不适合新的API。Google不希望用户给您他们的密码,因为您可能很想存储它,并且您可能会被黑客入侵:))此外,它还可以访问太多信息,因为您可以使用他们的Google Checkout帐户或更改密码以窃取他们的帐户。当前,从安全角度来看,唯一的方法是使用这些三足的验证系统(例如OAuth2)并阻止使用密码,以便用户摆脱向第三方提供其用户名和密码的习惯。当然,oauth2在桌面/命令行应用程序中更难使用...

OOB替代品

如果您不想要或无法启动Web服务器来侦听代码,则可以使用oob OAUTH FLOW。它通过简单地将oob指定为重定向URI来起作用。在这种情况下,将向用户显示一个页面,上面写着"这是您的auth代码。将其粘贴到您的应用程序中。"。在您的应用程序上,您只需在文本字段和VOILA中粘贴用户粘贴验证代码即可。这是一种更糟糕的用户体验,但在某些情况下可以更强大,并且在更多的环境中工作,尤其是低技术环境。

当心并非所有OAuth 2提供商都支持这一点,但至少Google和Facebook都可以。

最新更新