接口鉴权,提供给第三方调用的接口,进行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(BeeBoxConstant.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(BeeBoxConstant.SECRET);
        String sign2 = Md5Util.getMd5(sb.toString());
  比较对方传过来的sign值和我们计算得到的sign2是不是一致,一致签名验证就通过,不一致签名就是失败;    

猜你喜欢

转载自www.cnblogs.com/yangxiaohui227/p/11165757.html
今日推荐