所以我正在寻找一种在两个应用程序之间传递数据的安全方式(尝试为IOS应用程序实现安全的OAuth提供程序)。以下是我对安全性和一些其他假设/要求的定义:
最初,我考虑使用一些基于方案的方法,但这不安全,因为如果应用C可以register for the same scheme作为A和B,则拦截消息(违反要求1)。
检查重复的意图也是不够的,因为如果用户没有安装应用程序A,攻击者可以注册app A的方案并绕过此检查(违反要求2)。
我查看了Facebook的IOS OAuth,他们似乎要求应用程序在注册Facebook时输入他们的“捆绑ID”。我非常肯定Facebook正在使用这个捆绑ID进行某种检查,但不确定是什么。
感谢任何帮助。
答案 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的钥匙串进行大量研究,然后看看它能为您提供什么。