背景:未采取技术手段对信息传输过程中的信息进行防护处理。(查看信息传输过程中是否对信息进行数字签名等防护处理。
方案:对请求参数进行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('签名验证失败');
}