如何在面向公众的网站上使用oauth保护iOS企业分发?

时间:2012-06-02 08:15:00

标签: ios cordova oauth enterprise ios-provisioning

我们有一个应用程序的企业分发,我们只想在我们的组织内分发。

我们已经构建了指向正确位置的ipa文件和plist,并使用url创建了html页面:itms-services://?action = download&amp; url = {link to our plist}。< / p>

然而,我们的问题是确保分发流程。我们希望拥有公司自有iPad的员工能够在移动中下载应用程序(它们具有高度移动性)。因此,我们希望将plist和app放在公共网站上,该网站需要通过oauth服务登录。

我们的问题是,如果我们要求对应用程序和plist的URL进行身份验证,那么itms-services:// url将不再有效。会发生什么情况是用户单击itms-services链接,我们会看到未经身份验证的plist请求(重定向到登录),然后是设备上的“无法连接到{hostname}”。

目前,我能看到这个工作的唯一方法是不检查ipa和plist文件的身份验证。这意味着(我相信)有人猜测我们的plist文件的URL可以创建自己的itms-services链接并在未经授权的情况下下载应用程序,并且有效地导致我们违反与Apple的协议,仅向我们的员工分发。

我的问题是 - 如何创建一个不向公众公开ipa和plist文件的itms-services链接?如果相关,则使用no​​dejs构建网站,该应用程序是PhoneGap应用程序。

1 个答案:

答案 0 :(得分:9)

我已经找到了解决方案。

我们无法使用oauth身份验证,因为iOS安装过程不提供输入凭据的机会。

相反,当用户请求显示itms-services://链接的页面时,我们为该用户创建一个唯一的字符串,并使用AES-256对其进行加密,然后将其存储在数据库中。

我们的网址变为:itms-services://{url to plist}/{encryptedString}。我们尝试使用查询字符串,但似乎iOS安装工具没有传递它。

当安装工具请求Plist时,我们会针对数据库验证加密字符串,打开plist并将ipa文件的url重写为{url to ipa}/{encryptedString}

这看起来效果很好。我现在唯一能想到的问题是,URL可以公开共享,是与不应该访问的人合法的用户。我认为我们可以通过确保网址对时间敏感来解决这个问题(例如,只有5分钟可用)。

最后,对没有正确加密字符串的plist或ipa的任何请求都会被拒绝。

我希望这对某人有用!