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

时间:2011-11-30 18:44:35

标签: ios facebook oauth

是否可以在iOS上使oauth安全?

我正在调查OAuth 2.0,以便为iOS应用的“套件”实施单点登录+授权。为了解释我的担忧,我将简化并使用Facebook +第三方应用程序,使用Facebook进行身份验证(假设单词/“与朋友约会”)。

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

我还假设无法在iOS应用程序中保护“客户机密钥”或协议,因为您可以反编译该应用程序。我提出的任何方法都可以保证security by obscurity

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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

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

但是,由于资源所有者(用户)不太可能授权恶意应用程序对受保护资源采取任何操作,因此他/她将知道应用程序不是,因此这种风险似乎得到了缓解。事实上,你的申请。