是否有可能在iOS上使oauth安全?

jay*_*net 8 facebook oauth ios

是否有可能在iOS上使oauth安全?

我正在研究OAuth 2.0作为实现iOS应用程序"套件"的单点登录+授权的方法.为了解释我的担忧,我将简化并使用Facebook +第三方应用程序,使用Facebook进行身份验证(假设单词/"Words with Friends").

出于举例的目的,我假设Facebook注册支持方案/协议"facebook://"并且Words注册以支持"words://"

我还假设无法在iOS应用程序中保护"客户端密钥"或协议,因为您可以反编译应用程序.我想出什么办法来确保这一结果通过隐藏的安全.

另一个假设是没有办法阻止两个应用程序注册以处理相同的协议.当两个应用程序都注册相同协议时的行为是不确定的.(虽然看起来在设备上启动的第一个应用程序在第二个应用程序注册被忽略时被注册)

如果我了解iOS设备上的Facebook(用户代理)和Words(客户端)之间的工作流程:

  • 用户启动单词
  • 用户选择通过Facebook凭据登录
  • 单词调用openUrl("facebook://"),其中包含作为应用程序的单词的标识符和重定向uri(即"words://")
  • iOS推出Facebook应用程序
  • 用户输入凭据,Facebook应用程序验证Facebook授权服务器.
  • 用户提示授权单词访问Facebook数据(即单词可以访问我的朋友列表)
  • Facebook调用Word提供的回调uri以及访问令牌(即单词:// access_token?token_here)
  • 单词使用此标记访问我的朋友列表(即受保护的资源数据)

假设以上是正确的,如果我想要恶意并访问随机人的朋友列表,我可以创建一个应用程序,它也注册处理协议"words://"并在应用商店中获取它.如果有人安装了我的应用程序和单词并且我的应用程序是成功注册的应用程序(即在单词之前在设备上启动),则:

  • 启动Words,选择登录,启动Facebook
  • 用户进行身份验证/授权
  • Facebook尝试通过在重定向网址上调用openUrl来重定向回Word
  • 我的应用程序(不是单词)已启动
  • 我的应用程序现在可以访问auth代码,其中(通过反编译获知的秘密)可以交换为access_token,有权访问您的朋友列表

我希望我的推理是有缺陷的,或者我必须(特别)得出结论,第三方应用的Facebook iOS身份验证是不安全的.

更一般地说,是否可以在iOS应用程序上安全地实施OAuth 2.0(授权/隐式授权工作流)?

ben*_*ioT 1

Google 针对这个问题提出了一个实验性解决方案,他们称之为OAuth 2.0 for Installed Applications

Google OAuth 2.0 端点支持安装在设备上的应用程序...假设这些应用程序无法保密。

本质上,共享秘密被视为非秘密。

在撰写本文时,大多数 OAuth 2.0 服务器似乎不支持此实验设计。

这种设计引入了这样的风险:攻击者可能会创建一个新客户端,将自己表示为授权服务器的应用程序(攻击者需要按照您在问题中描述的方式获取客户端标识符,或者按照此处建议的技术之一获取客户端标识符) 。

然而,资源所有者(用户)不太可能授权恶意应用程序对受保护的资源采取任何操作,这一事实似乎减轻了这种风险,因为他/她知道该应用程序实际上不是,你的申请。