前言
在为移动端做API接口时,Java服务器端对接口一般需要做两种处理。
1.对请求的接口在interceptor 做authorize鉴权
2.对请求过来的参数进行加密校验,防止参数在传递过程中被篡改。
鉴权
鉴权方式我所使用的到的基本上目前有以下三种:
1.session
2.cookie
3.oauth2.0
对于这三种方式,以后细讲下。在此不再多说。
加密
对于传输过程中防止参数被篡改,可以使用HTTPS来有效的增强安全性。
对于重要的数据传输,除了需要https来认证,还需要对传入参数进行加密解密的校验,达到双层保证。
一般处理思路:
将传入参数组合成字符串,然后做加密,得到加密的token值;调用接口时,同时将此值传入。服务器拿到此值,根据对应的加密方式解密比对。
来验证传入值的完整性。
关于加密方式,这里不再赘述。可根据接口的重要程度来选择。
如哈希算法md5、对称加密的DES、非对称的RSA或者一些加盐加密。
以md5为例,使用Java的SortedMap,对请求参数进行MD5,并传入。
SortedMap<Object, Object> requestParams = new TreeMap<Object, Object>();
requestParams.put("version", "1");
requestParams.put("userName", "123456");
requestParams.put("password", "123456");
StringBuffer requestParamsStringBuffer = new StringBuffer();
System.out.println("排序之后的Key Value:");
for (Map.Entry<Object, Object> entry : requestParams.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
requestParamsStringBuffer.append(entry.getKey() + "" + entry.getValue());
}
System.out.println(requestParamsStringBuffer.toString());
String md5="";
try {
md5 = MD5.getMd5(requestParamsStringBuffer.toString());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
System.out.println("request params md5加密后:" + md5);
//request params md5加密后:d42fdf5e525386c648b1303fa2aa5aab
//当我们传入传入参数时,将token=d42fdf5e525386c648b1303fa2aa5aab 与其他参数平级传入,来防止请求被篡改
接下来,我们在接口文档中对token进行解释,并要求移动端此过程调用即可。
bingo!