如何在IOS中实现安全的应用程序间消息传递

时间:2014-02-24 20:01:45

标签: ios iphone facebook security oauth

所以我正在寻找一种在两个应用程序之间传递数据的安全方式(尝试为IOS应用程序实现安全的OAuth提供程序)。以下是我对安全性和一些其他假设/要求的定义:

  1. 我希望应用A调用应用B并将其传递给令牌TokenA,然后应用B根据此令牌获取一些结果,并将结果返回给应用A.假设有一个名为app C的恶意应用,我想要确保应用C无法拦截应用A和B之间的任何消息。
  2. 假设TokenA是应用C可以获得的一些公共信息。我想确保应用B不响应TokenA的请求,除非它来自应用程序A.
  3. 假设应用A实际上是“服务提供商”,应用A可以在应用A注册使用该服务时向应用B提供一些信息(例如,IOS捆绑ID)。
  4. 安全消息传递方法不得要求使用越狱手机。
  5. 假设应用程序C可以在应用程序A和B之前或之后安装。
  6. 最初,我考虑使用一些基于方案的方法,但这不安全,因为如果应用C可以register for the same scheme作为A和B,则拦截消息(违反要求1)。

    检查重复的意图也是不够的,因为如果用户没有安装应用程序A,攻击者可以注册app A的方案并绕过此检查(违反要求2)。

    我查看了Facebook的IOS OAuth,他们似乎要求应用程序在注册Facebook时输入他们的“捆绑ID”。我非常肯定Facebook正在使用这个捆绑ID进行某种检查,但不确定是什么。

    感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

除了url方案之外,没有其他方法可以直接调用另一个应用程序,所以你别无选择,只能使用这种方法然后找到一种方法来确保它满意,如果你想让app A直接调用app乙

如果您绝对不能使用网址方案,那么唯一的另一种选择就是应用A和应用B通过远程服务器间接通信的一些复杂机制。

当应用程序在设备上调用Facebook时,应用程序已注册并获取,然后硬编码其中的facebook令牌,这可能以某种方式用于确保身份验证 - 因此必须有3个实体内容(应用程序) ,Facebook应用程序和Facebook服务器。)

但是,如果您将url方案与密钥存储区结合使用,我认为您可以使两个应用程序之间的数据共享安全 - 应用程序A将一些加密数据发布到密钥存储区,然后通过网址方案通知应用B其可用,然后app B从密钥库中检索它。

如果应用A和应用B知道如何加密数据,那么应用C知道那里有数据并且可以访问它并不重要。 (实际上我认为有一种方法可以使用钥匙串,可以用来排除应用程序C甚至访问它,但目前没有交付信息确认)。 即使应用程序C可以访问钥匙串中的数据,您也可以找到保护它的方法,以便应用程序C无法对其进行解码。

我首先要对iOS的钥匙串进行大量研究,然后看看它能为您提供什么。

https://developer.apple.com/library/mac/documentation/security/conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html#//apple_ref/doc/uid/TP30000897-CH208-SW1