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

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

我正在研究OAuth 2.0作为实现iOS套件“单套”应用程序的单一login+授权的一种手段。 为了解释我的担忧,我将简化并使用Facebook +使用Facebook进行身份validation的第三方应用程序(让我们来说一下“Words with Friends”)。

举例来说,我假设Facebook注册支持scheme / protocol“facebook://”,并且这个Words注册为支持“words://”

我也做了一个假设,即不可能在iOS应用程序中保护“客户机密”或协议,因为您可以反编译应用程序。 我已经想出了任何方法来确保安全性 。

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

如果我了解iOS设备上的Facebook(用户代理)和Words(客户端)之间的工作stream程,请执行以下操作:

  • 用户启动单词
  • 用户select通过Facebook的凭据login
  • 单词调用openUrl(“facebook://”),其中包含字作为应用程序和redirecturi(即“words://”)的标识符
  • iOS启动Facebook应用程序
  • 用户input凭证,Facebook应用程序根据Facebook授权服务器进行validation。
  • 用户提示授权单词访问Facebook数据(即单词可以访问我的朋友列表)
  • Facebook调用由字提供的callbackURI以及访问令牌(即words:// access_token?token_here)
  • 单词使用此令牌访问我的朋友列表(即受保护的资源数据)

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

  • 启动Words,selectlogin,启动Facebook
  • 用户authentication/授权
  • Facebook尝试通过在redirecturl上调用openUrl来redirect到Words
  • 我的应用程序(不是话)启动
  • 我的应用程序现在可以访问auth代码,(通过反编译学到的秘密)可以交换为access_token,有权访问你的朋友列表

我希望我的推理是有缺陷的,否则我必须得出结论(特别是)第三方应用程序的Facebook iOSauthentication是不安全的。

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

谷歌已经为这个问题提出了一个实验性的解决scheme,他们称OAuth 2.0为安装的应用程序 。

Google OAuth 2.0terminal支持安装在设备上的应用程序…假设这些应用程序不能保密。

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

在撰写本文时,大多数OAuth 2.0服务器似乎不支持这种实验devise。

这种devise引入了攻击者可能会创build一个新的客户端的风险,这个客户端代表自己作为您的授权服务器的应用程序(攻击者需要获得您的问题中描述的客户端标识符,或者按照这里所build议的技术之一) 。

然而,这种风险似乎可以通过资源所有者(用户)不可能授权恶意应用程序对受保护资源采取任何行动的事实来缓解,因为他/她知道应用程序实际上不是这样,你的申请。