问题
最近遇到在企业内部分发iOS软件的时候,plist文件和ipa文件都不能下载安装的问题。安装苹果的官方文档:《通过网页服务器分发企业内部应用》。搭建了让企业内部员工下载的iOS安装包的服务。但最近给其中的静态资源文件服务器加上了需要用户输入用户名和密码的才能下载的文件的强验证,这直接导致plist文件和ipa不能下载了。
原因
通过抓包发现,用户点击下载的时候,即点击如下代码的时候:
<a href="itms-services://?action=download-manifest&url=https://example.com/manifest.plist">Install App</a>
itms-services协议想要下载plist文件的Get请求,没有携带用户登录的cookie,导致下载失败。
参考解决方案
根据《How to secure iOS enterprise distribution using oauth on a public facing website? 》这个帖子的思路,就是把请求下载plist文件和请求下载ipa文件的两个Get请求,都做成独立的服务,具体过程如下:
总结
itms-services下载问题,应该用OAuth2的方案解决。具体应该看一看阮一峰关于OAuth2.0的几篇文章:
最好使用OAuth2.0的授权码模式解决这个。OAuth2.0流程图如下:
授权码模式,只在前端暴露一次OAuth2.0授权码,后台通过前端获得的授权码,用来获得访问令牌,这样就保证访问令牌永远只在后台了。下次用户在请求,我们根据用户,就可以从数据库中查询出访问令牌,通过访问令牌,自己对第三方资源服务器进行调用了。
网络上面另外一张关于授权码模式流程图,这张图更加简洁: