背景:未采取技术手段对信息传输过程中的信息进行防护处理。(查看信息传输过程中是否对信息进行数字签名等防护处理。

方案:对请求参数进行HmacSHA256 获取hash 后写入 header中,方便后端进行参数校验

应用:传输加密

axios 统一封装 参数签名

对requestbody 参数进行签名

const secretKey = 'secretkey';//用于加密的秘钥

setApiDefaultConfig({
  //axios 用于转换 request 的方法
  transformRequest: [(data, headers) => {
  
     headers['X-Signature'] = CryptoJS.HmacSHA256(JSON.stringify(data),secretKey)
    // axios默认是Request Payload格式,加了transformRequest会默认变成form Data格式,需要自己再转一下变回Request Payload,我在这里 再默认将他转为 json格式,这里是个小坑 需要注意一下
    headers['Content-Type'] = 'application/json;charset=UTF-8'
      
    return JSON.stringify(data);
  }]
})

校验签名

保证传参过程中不被篡改,实际使用 加密前的参数 进行同样的 加密过程 比较签名即可


//解密参数 生成签名
const calculatedSignature = crypto.HmacSHA256(JSON.stringify(data), secretKey).toString();

if (calculatedSignature === header中携带的签名) {
    console.log('签名验证通过');
} else {
    console.log('签名验证失败');
}
Last modification:July 13, 2023
如果觉得我的文章对你有用,请随意赞赏