2011-11-30 82 views
8

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

我调查OAuth 2.0以实现单点登录+授权的iOS应用的“套房”的一种手段。为了解释我的担忧,我将简化并使用Facebook +使用Facebook进行身份验证的第三方应用程序(比方说单词/“与朋友的单词”)。

出于示例的目的,我假定寄存器的Facebook支持方案/协议“脸谱://”,并且词语寄存器来支持“词://”

我也有这样的假设因为您可以反编译应用程序,所以无法在iOS应用程序中保护“客户机密”或协议。我已经想出了任何方法来保证结果为security by obscurity

另一个假设是没有办法来防止两个应用程序从注册处理相同的协议。两个应用程序都为相同协议注册时的行为是不确定的。 (尽管似乎启动装置上的第一应用程序被注册,而第二应用注册被忽略)

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

  • 用户启动词
  • 用户选择通过Facebook凭证登录
  • 字调用的OpenURL(“脸谱://”),其包含,除其他事项外的标识符以用于字作为应用程序和重定向URI(即 “词://”)
  • iOS的启动Facebook应用
  • 用户enteres凭证,因此Facebook应用程序验证对Facebook的授权服务器。
  • 提示用户授权话说到访问Facebook数据(即无法用言语来访问我的好友列表)
  • Facebook的调用由词与访问令牌一起提供的回调URI(即词:// token_here的access_token)
  • 词用途此令牌来访问我的好友列表(即保护资源数据)

假设以上是正确的,如果我想成为恶意访问随机的人的朋友列表,我可以创建也注册来处理协议的应用“words://”并在应用商店中获取。如果有人安装了我的应用和单词,并且我的应用是成功注册的应用(即推出词前的设备上),则:

  • 启动词,选择登录,启动Facebook的
  • 用户认证/授权
  • 的Facebook试图通过对重定向URL
  • 调用的OpenURL回重定向到词
  • 我的应用程序(不字)推出
  • 我的应用现在已经获得了授权码,这(通过反编译学到的秘密),可以为来的access_token交换,有权限访问你的好友列表

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

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

+0

你是指一般的OAuth或使用Facebook iOS API的Facebook吗?对于一般的OAuth,您应该可以在应用程序的Web视图中处理身份验证,无需注册自定义网址。 –

+0

OAuth通常会使用授权/隐式授权工作流程。 – jayraynet

回答

1

谷歌已经为这个问题提出了一个实验性的解决方案,他们称之为OAuth 2.0 for Installed Applications

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

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

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

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

但是,由于资源所有者(用户)不可能授权恶意应用程序对受保护资源采取任何操作,因此他/她将知道该应用程序不是,实际上,你的应用程序。

相关问题