OAuth2破坏桌面应用程序的安全性?

OAuth2破坏桌面应用程序的安全性?,oauth,Oauth,目前在web服务Imgur的桌面应用程序中从OAuth1迁移到OAuth2的过程中,我对OAuth2规范感到困惑。显然,它破坏了OAuth1提供的所有安全性,根据本文档,并查看了关于OAuth2的不同服务文档 使用OAuth1,您可以使用用户授予访问权限的服务的URL,并显示PIN以复制/粘贴到您的应用程序中,这是非常好的安全性,因为用户从不向应用程序授予登录名/密码,并且可以随时通过服务网站撤销对应用程序的访问权限 现在使用OAuth2时,他们忽略了这种情况,强制应用程序请求用户的登录/密码,

目前在web服务Imgur的桌面应用程序中从OAuth1迁移到OAuth2的过程中,我对OAuth2规范感到困惑。显然,它破坏了OAuth1提供的所有安全性,根据本文档,并查看了关于OAuth2的不同服务文档

使用OAuth1,您可以使用用户授予访问权限的服务的URL,并显示PIN以复制/粘贴到您的应用程序中,这是非常好的安全性,因为用户从不向应用程序授予登录名/密码,并且可以随时通过服务网站撤销对应用程序的访问权限

现在使用OAuth2时,他们忽略了这种情况,强制应用程序请求用户的登录/密码,除非应用程序在其网站中创建自己的脚本,以便在授予访问权限后从服务接收令牌,然后让用户从您的网站复制/粘贴它


我在这里遗漏了什么吗?

桌面应用程序可以而且应该使用用户代理浏览器来执行OAuth,这在OAuth 2规范中本机应用程序下进行了描述。您所描述的流程更多的是针对具有有限输入功能的设备,如游戏控制台、打印机、照相机等


顺便说一句,设备流在OAuth 2的早期规范中,但在某些地方被省略了。一些API提供商,如谷歌,对其实施了有限的支持。

本地应用程序才是最好的选择。请参阅OAuth 2.0 RFC的一节。本机应用程序不用于存储密码。如果要避免直接在应用程序中输入凭据,即使是在浏览器控件中,也可以从OAuth 2.0本机应用程序执行以下操作: 1.使用授权端点启动默认浏览器。 2.为重定向URI实现一个简单的web页面,它选择授权代码并将其显示给用户。 3.要求用户复制代码并将其粘贴回本机应用程序


或者,规范建议您利用本机平台的URL重定向方案恢复原始应用程序。您可以检查iOS和Android的URL方案功能。不幸的是,这两个平台都不能保证URL方案的唯一性,因此授权代码可能会被另一个在同一URL上激活的恶意应用程序劫持。我已经为此提交了一个iOS bug。

请阅读Erin Hammer的文章,这很有启发性。OAuth2在一开始是个好主意,但在实现过程中却遇到了难以置信的扭曲。在桌面应用程序中模拟浏览器输入意味着给应用程序提供完整的登录凭据,但是,完全没有首先使用OAuth的意义所有安全性都消失了。为什么OA2没有PIN方法?需要澄清的是,应用程序不应该直接捕获提供商的用户登录。本机应用程序的流程包括启动用户代理/浏览器,并允许用户直接与授权服务器交互。换句话说,您不是在模拟,而是在委托给用户安装/信任的实际浏览器。是的,但OAuth2不提供复制/粘贴PIN机制,在任何可能的情况下,auth调用都会重定向到给定的URL,因此应用程序被排除在流之外。唯一的解决方案是构建您自己的PIN页面,身份验证将重定向到该页面,这并不总是可能/可用,或者处理用户的登录名/密码,这将删除安全性。Hikari,这根本不是真的。对于桌面应用程序,有在用户在浏览器中与提供商授权后返回应用程序的规定。并非每个提供程序都支持此功能,但有关如何实现此功能的示例,请参阅可将授权代码返回到浏览器标题栏中的应用程序或查询字符串中的端口。。这与OAuth1中的销机制不同。Titlebar=应用程序本身必须嵌入一个浏览器页面,这太复杂了。localhost:应用程序必须充当Web服务器才能接收回请求。为什么他们不能保持来自OA1的针流,这在目前为止一直很有效。