【问题标题】:OAuth 2.0 public client impersonationOAuth 2.0 公共客户端模拟
【发布时间】:2016-11-05 06:23:52
【问题描述】:

我想开发一个本机应用程序(用于手机),它使用OAuth 2.0 Authorization 从资源 API 访问受保护的资源。正如section 2.1 中定义的那样,我的客户的类型public

在注册时,授权服务器会提供一个client_id 用于公共识别,并提供一个redirect_uri

客户端将使用Authorization Code 从授权服务器接收它的授权许可。对于中间的任何攻击者,这一切似乎都是安全的(如果实施正确的话)。

section 10.2 中讨论了客户端模拟。在我的例子中,资源所有者通过用户代理向授权服务器提供其凭据来授予客户端授权。本节讨论授权服务器:

应该使用其他方式来保护资源所有者免受此类 潜在的恶意客户端。例如,授权服务器 可以聘请资源所有者协助识别客户和 它的起源。

我的主要担心是,一旦检索到 client_idredirect_uri,就很容易冒充我的客户。
由于公共客户端的性质,这可以很容易地进行逆向工程。或者就我而言,该项目将是开源的,因此可以从网络上检索到这些信息。

据我从第 10.2 节了解,资源所有者有责任通过与授权服务器应协助的内容进行比较来检查客户端是否合法。

根据我的第三方应用程序向我请求授权授予的经验,我得到的只是一个页面,其中包含有关实际应该请求该授权的客户端的一些信息。根据纯逻辑,我只能判断请求授权的客户端是否真的是授权服务器告诉我应该是谁的客户端。

因此,每当我们处理PEBKAC(我认为这种情况经常发生)时,如果资源所有者只是授予它们(可能看起来像我的合法客户)授权,冒充者可以轻松访问受保护的资源,这不是真的吗? ?

【问题讨论】:

    标签: security oauth-2.0


    【解决方案1】:

    TLDR - 您希望仅将 oauth 访问令牌颁发给有效客户端 - 在这种情况下是安装您的应用的设备,是吗?

    首先 - Oauth2 有多个用于发布令牌的工作流程。当您运行 Oauth2 服务及其向运行您的应用程序的设备颁发令牌时,授权代码/重定向 URL 不是相关的工作流程。我建议你在这里阅读我的答案 - https://stackoverflow.com/a/17670574/116524

    第二 - 这里没有运气。只需完全在 HTTPS 上运行您的服务。没有真正的方法可以知道客户端注册请求是否来自从官方应用商店安装的应用。您可以将一些秘密存储到应用程序中,但可以通过逆向工程找到。发生这种情况的唯一可能方式是应用商店本身提供的某种身份验证信息,目前还不存在。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多