OAuth 认证客户端安全问题

OAuth authentication client side security issues

我理解从提供商的角度尝试使用 OAuth 进行身份验证的安全问题。然而,我被要求为用户提供使用 OAuth 登录新 Web 应用程序的便利,并从 Google 和 Twitter 等网站获取他们的基本身份信息,客户端应用程序中的新用户帐户将从中获取被创建。此外,对于不想使用第三方帐户的任何人,用户都可以通过 user/passwords 直接 regster/login。

我们不需要对用户的 details/info 或提供商 API 的任何访问权限,只需要他们首次登录时的基本身份,当然也允许他们以后通过提供商登录。不完全是 OAuth 的用例,OpenId 将是首选,但 OAuth 已被指定并且没有有效的关注将需要被遵守。

我的问题是假设用户已通过相关提供商正确验证了自己的安全性有多安全。如果我相信说 Google 来执行充分的身份验证并且我获得了访问令牌和他们的身份,大概我可以认为这是一个合法用户?如果有人可以访问资源所有者机器并在浏览器中保存密码,则显然会出现问题,但对于那些选择直接注册的用户来说,这个问题是存在的。

大概可以伪造访问令牌,例如假扮中间人google? MITM 可以伪造访问令牌并提供与注册用户的 google id 相匹配的身份详细信息?我看不出任何让客户知道信息肯定来自提供商的信息。显然这个问题不是OAuth独有的。

有人可以通过其他方式非法访问使用 OAuth 的帐户来验证 自己。

悲哀地说,你上一句的场景是事实。

但是你应该意识到安全是一个巨大而复杂的问题,尤其是在客户端。它不仅发生在一个点上,而且在整个互联网访问生命周期中发生在许多点上。您给出的场景不是 OAuth 试图解决的问题。

OAuth 允许 application access specific 用户资源(已被由用户提供许可)并且它不能超出该范围。我没有看到提到使用基于 OAuth 的应用程序创建新用户的文档。

也就是说:

We do not require any access to the user's details/info or providers APIs, just their basic identity when they first logon

这违反了 OAuth 授权流程。服务提供商进行身份验证并提供相关令牌(基于身份验证成功)。这是为了确保在 OAuth 身份验证过程中没有进行第 3 方身份验证。

My question is how safe is it to assume that the user has correctly authenticated themselves with the relevant provider.

这一切都取决于服务提供商本身。为了符合 OAuth 协议,其中一项要求是用户身份验证 必须在具有数字证书的安全传输层中完成 (对于 HTTP,必须在 HTTPS 中完成)。 OAuth 消费者对身份验证过程没有任何参考。此外,身份验证过程基本上会询问用户消费者是否可以访问特定用户的资源(而不是其他任何人,因为他没有权限)。

Is it possible to fake an access token, e.g. man in the middle pretending to be google?

欺骗服务提供商可能的,但会很乏味。首先,您必须创建一个完整的 OAuth 握手过程,创建 exact API 作为服务提供者,同时设置一个安全的环境(如 OAuth 推荐的那样)。欺骗服务提供商唯一可以获得的是客户端凭据。如果它有其用户凭据,则无需使用该应用程序,因为无法使用应用程序提供用户凭据来进行恶意破坏。

其次,访问令牌确实会过期,因此即使您欺骗并检索访问令牌,原始应用程序所有者也可以要求服务提供商阻止该应用程序,并且访问令牌可能毫无用处。

中间人攻击是不可能的。从某种意义上说,您必须复制服务提供商,因为最终用户将无法区分原始服务提供商和欺骗服务提供商,以便捕获所有相关凭证(来自应用程序和最终用户)。