OAuth 2.0公开客户端模拟授权

5
我想开发一个原生应用(用于手机),使用OAuth 2.0授权访问来自资源API的受保护资源。根据第2.1节的定义,我的客户端类型公共
在注册时,授权服务器提供client_id进行公共身份验证和redirect_uri
客户端将使用授权码从授权服务器接收其授权许可。如果正确实现,这似乎对中间的任何攻击者都很安全。

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

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

我的主要关注点是一旦检索到client_idredirect_uri,很容易模拟我的客户端。
由于公共客户端的性质,这可以轻松地进行反向工程。或者在我的情况下,该项目将是开源的,因此可以从Web检索此信息。

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

根据我与第三方应用程序请求授权许可的经验,我收到的只是一个页面,上面有关于实际应该请求授权许可的客户端的一些信息。从纯逻辑上来看,我只能判断请求授权许可的客户端是否确实是授权服务器所告诉我的客户端。
因此,每当我们处理 PEBKAC 时(我认为这经常发生),如果资源所有者授予了攻击者(可能完全看起来像我的合法客户端)授权许可,那么冒名顶替者可以轻松地访问受保护的资源,这是真的吗?
2个回答

2
TLDR - 你希望OAuth访问令牌只发放给有效的客户端 - 在这种情况下是安装了你的应用程序的设备,对吗?
首先 - OAuth2有多个工作流程来发放令牌。当您运行Oauth2服务并向运行您的应用程序的设备发放令牌时,授权代码/重定向URL不是相关的工作流程。我建议您阅读我的答案https://dev59.com/U3TYa4cB1Zd3GeqPu3W1#17670574
其次 - 这里没有运气。只需完全在HTTPS上运行您的服务即可。真正的方法无法知道客户端注册请求是否来自于官方应用商店中安装的应用程序。您可以将一些秘密存储在应用程序中,但可以通过反向工程找到它。唯一可能发生的方式是应用商店本身提供某种身份验证信息,但目前不存在这样的信息。

0
"这种情况唯一可能发生的方式就是应用商店本身提供某种认证信息,但目前还不存在这样的信息。"
"苹果应用商店难道不提供这样的信息吗?"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接