OAuth2.0 - 它如何防止客户端冒充?

Posted

技术标签:

【中文标题】OAuth2.0 - 它如何防止客户端冒充?【英文标题】:OAuth2.0 - How does it protect from client impersonation? 【发布时间】:2013-07-30 05:54:41 【问题描述】:

我们计划在我们的系统中使用 OAuth 2.0,但我们对安全级别感到不舒服。 OAuth 2 成为行业标准,所以我怀疑我们可能会遗漏一些东西 :-)

我们需要保护系统 API;有些 API 公开了对用户信息的访问权限,有些则没有。用户可以在不登录的情况下使用系统,以后进行需要他身份的操作时,他需要提供他的凭据。

因此,我们将首先使用客户端凭据授权授予来识别客户端。我们更喜欢这种模式,因为使用密钥看起来更安全。客户端是加载到用户代理的 java 脚本应用程序。流程是:

    用户代理请求应用程序的后端加载应用程序 客户端的后端会调用授权服务器对客户端进行授权。它将提供 client_id 和 secret_key。成功后将颁发访问令牌。 将加载到客户端的应用程序将包含访问令牌。 客户端将使用令牌访问系统API的

问:任何人都可以使用应用程序的 URL。如果您加载应用程序,您将拥有访问令牌。您无需提供客户端 ID 或任何秘密……它就在那里。那么安全性在哪里呢?

对于需要识别用户的情况,我们考虑使用隐式授权授予。在这种情况下,我们不使用密钥,因为它不是客户端的秘密。但是,任何知道 client_id 并拥有注册用户的人都可以获得访问令牌。

问:那么,问题又是关于安全性的,我们怎么知道访问系统的客户端是真正的客户端?

谢谢,

Aviram

【问题讨论】:

【参考方案1】:

您为什么关心用户获取访问令牌?使用该令牌,只有属于该用户的数据才会暴露给应用程序。

对于需要识别用户的情况:现在后端服务器已经存在,也可以使用代码流。用户和客户端都被识别。

对于不需要识别用户的情况:客户端后端服务器中的代理是否可以接受?访问令牌只能作为代理持有,您可以确保它是真实的客户端。 唯一的问题是代理需要检查每个 HTTP 请求的来源,以确保它来自同一个域。 javascript 应用程序可以在向代理发送请求时添加一些自定义标头。

【讨论】:

以上是关于OAuth2.0 - 它如何防止客户端冒充?的主要内容,如果未能解决你的问题,请参考以下文章

使用 OAuth2 的 API 网关的客户端凭据 [关闭]

OAuth2.0

当我拥有客户端 ID 和客户端密码时,如何从使用 OAuth2.0 身份验证的 API 获取数据? (亮稿)

防止 OAuth 客户端修改用户的请求

什么是正确的授权码 OAuth2 流程?

使用 RESTify Node.js 创建 OAuth2.0 服务提供者