【发布时间】:2015-01-12 12:11:21
【问题描述】:
从提供商的角度,我了解尝试使用 OAuth 进行身份验证的安全问题。但是,我被要求为用户提供使用 OAuth 登录到新 Web 应用程序的工具,并从 Google 和 Twitter 等网站获取他们的基本身份信息,然后在客户端应用程序中创建一个新的用户帐户。此外,对于不希望使用第三方帐户的任何人,用户都可以通过用户/密码直接注册/登录。
我们不需要访问用户的详细信息/信息或提供商 API,只需要他们首次登录时的基本身份,当然还允许他们将来通过提供商登录。不完全是 OAuth 的用例,OpenId 本来是首选,但 OAuth 已经指定,没有有效的问题需要遵守。
我的问题是,假设用户已通过相关提供商正确验证了自己的身份有多安全。如果我相信谷歌能够执行足够的身份验证并且我获得了访问令牌及其身份,那么我大概可以认为这是一个合法用户吗?如果有人可以访问资源所有者的机器并在浏览器中保存密码,则显然存在问题,但对于那些选择直接注册的用户来说,这个问题就存在了。
大概可以伪造访问令牌,例如中间的人假装是谷歌? MITM 可以伪造访问令牌并提供与注册用户的 google id 匹配的身份详细信息?我没有看到任何让客户知道信息肯定来自提供商的东西。显然这个问题并不是 OAuth 独有的。
还有其他方法可以非法访问使用 OAuth 来验证自己的帐户。
【问题讨论】:
-
首先,访问令牌特定于应用程序而不是最终用户。要获取访问令牌,必须将应用程序注册到服务提供者。其次,OAuth 对用户身份验证过程没有任何参考,提供的用户身份验证只是为了让用户接受应用程序是否可以访问其受保护的资源。那么,如果应用程序本身从未被服务提供商注册过,那么伪造访问令牌如何真正合适呢?
-
显然应用程序将被注册。我曾认为,如果有东西可以拦截到 OAuth 提供者的通信,他们可以假装是他们,返回一个随机令牌,然后在请求时提供一个捕获的 google id。从未联系过 Google,并且该应用程序“假设”用户已经使用 Google 进行了身份验证。据我所知,客户无法验证令牌来自 Google。
标签: security authentication oauth