OAuth 2.0 公共客户端模拟

Qua*_*ive 5 security oauth-2.0

我想开发一个本机应用程序(适用于手机),它使用OAuth 2.0 授权从资源 API 访问受保护的资源。正如2.1 节中所定义的,我的客户端类型public.

注册后,授权服务器会提供一个client_id用于公共身份识别的 和一个redirect_uri.

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

第 10.2 节讨论了客户端模拟。就我而言,资源所有者通过用户代理向授权服务器提供其凭据来授予客户端授权。本节讨论授权服务器:

应利用其他方法来保护资源所有者免受此类潜在恶意客户端的侵害。例如,授权服务器可以让资源所有者协助识别客户端及其来源。

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

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

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

因此,每当我们处理PEBKAC(我认为这种情况经常发生)时,如果资源所有者授予他们(可能看起来与我的合法客户端完全相同)授权,模仿者是否可以轻松访问受保护的资源,这不是真的吗?

s1d*_*s1d 2

TLDR - 您希望仅向有效客户端颁发 oauth 访问令牌 - 在本例中是安装您的应用程序的设备,是吗?

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

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