接口鉴权,提供给第三方调用的接口,进行sign签名
//场景:公司要跟第三方公司合作,提供接口给对方对接,这样需要对接口进行授权,不然任何人都可以调我们公司的接口,会导致安全隐患: 思路: 在每个接口请求参数都带上ApiKey 和sign签名: 我们在对接前,给对方提供一个ApiKey 和密码secrect,这2个值随便自己定义,只要双方都约定好就行了: 对方要做的事情: 对请求参requestDTO 除sign签名字段外,转成JSON字符串, 然后前后拼上secrect,再MD5加密得到sign签名: 伪代码: String reqStr=JSON.toJSONStirng(requestDTO); StringBuilder sb = new StringBuilder(); sb.append(BeeBoxConstant.SECRET); sb.append(json); sb.append(MyConstant.SECRET); String sign = Md5Util.getMd5(sb.toString()); requestDTO.setSign(sign); 注意:requestDTO不能将密码也带过去 我们要做的事情: 拿到对方请求参数:requestDTO 获取sign值和apiKey: String sign=requestDTO.getSign(); String apiKey=requestDTO.getApiKey(); 通过apikey去获得密码secrect,因为apikey和密码是我们提供的,所以肯定知道在哪里获取; 之后请求对象设置sign值为null: requestDTO.setSign(null); 转成JSON,然后按同样的方式生成sign签名: String reqStr=JSON.toJSONStirng(requestDTO); StringBuilder sb = new StringBuilder(); sb.append(BeeBoxConstant.SECRET); sb.append(json); sb.append(MyConstant.SECRET); String sign2 = Md5Util.getMd5(sb.toString()); 比较对方传过来的sign值和我们计算得到的sign2是不是一致,一致签名验证就通过,不一致签名就是失败;