Alamofire隔离网络框架封装 + 签名 + ssl证书信任

Apple在元旦开始就要强制iOS开发者们使用 https 请求了,就来一篇吧。简单的讲,强制iOS开发者使用https的作用就是为了防止应用在和后端进行数据通信过程中传输的数据被第三方中间攻击(篡改请求),或者被抓包工具获取我们传输的数据,从而提升我们数据的安全性。https参考链接:http://baike.baidu.com/view/14121.htm 。

封装请求工具类

我们在使用第三方网络请求库时,一般都不会直接调用第三方库的方法,而是自己基于第三方库封装一个工具类,并提供一个单利对象用于网络请求。从而降低耦合度和代码污染,也方便统一处于网络请求和后期替换网络框架等。

我这里这个例子比较简单,仅作为本文章演示签名和ssl证书信任的demo代码,实际项目请根据实际需求去封装即可。

自定义响应枚举

用来统一处理请求可能导致的结果,具体按照项目需求来定义,如果项目需要,还可以定义一套客户端的错误码表,以便我们更好的定位错误。

请求回调闭包

将响应状态枚举、后端返回的数据和提示语回调给调用者,具体也需要根据自己项目的实际情况来定义。

工具类单利对象

请求网络我们不需要重复创建很多对象,所以只需要使用单利即可,节约内存也方便调用。

配置SessionManager

并且我们在第一次获取单利对象的同时,需要配置好ssl证书信任策略。首先将后台给我们的证书文件导入项目中,我这里命名为 cert.cer 。然后配置 Alamofire 提供的 SessionManager 对象,这个对象以后将作为我们请求接口使用。

设置公共请求头

我们一般会将app的一些公共版本信息、token/session、签名等设置为请求头,这里我们主要说的是签名的问题。为了防止API调用过程中被黑客恶意篡改,我们调用API的时候都会对请求进行签名,后端也会对签名进行验证,如果验证不通过,请求也就不会继续处理了。(我们和后端使用相同的签名算法,并且比较最终签名结果,从而确保请求未被篡改)

参考地址:http://open.taobao.com/docs/doc.htm?spm=a3142.7395905.4.16.eQ4qIu&articleId=101617&docType=1&treeId=1 。

具体算法以后端提供的为准,我们只需根据后端提供的算法进行处理即可。这里我采用较为通用的算法:hex(md5(headers + parameters + secret))其中 secret 是和后端协商的API密钥。

封装基本请求方法

接下来我们就可以封装我们的基本请求方法了,这里我封装了基本的 get/post 请求,并使用我们前面配置好的 SessionManager 对象来处理网络请求。这样我们的请求就不会被 Charles 等抓包工具抓取数据或者请求被恶意篡改了。

封装网络工具类并没有完成,这里只是一个演示demo而已,具体大家自己根据自己的业务逻辑和后台响应来封装吧。

完整代码

JFNetworkTools.swift

使用工具类请求api接口

如有不对的地方,欢迎大神指正。

六阿哥

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: