5

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

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

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

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

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

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

4

1 回答 1

12

我已经找到了解决方案。

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

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

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

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

这似乎工作得很好。目前我能想到的唯一问题是,该 URL 可以作为合法用户与不应该访问的人公开共享。我认为我们可以通过确保 url 对时间敏感(例如仅 5 分钟可用)来解决这个问题。

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

我希望这对某人有用!

于 2012-06-03T15:56:50.550 回答