网站首页lua/js
js接口签名及后端验签
发布时间:2023-03-22 12:14:21编辑:slayer.hover阅读(338)
1. 前端js,拼接接口参数,生成签名sign
第一步: 安装 crypto-js
npm install crypto-js
第二步:引入CryptoJS
import CryptoJS from 'crypto-js'
第三步: 生成签名
let params = { param1: '111', param2: '222', ... timestamp: Date.now(), }; params.sign= generateSign(params); request({ url, params }) function generateSign(param) { let paramKeys = Object.keys(param); let paramArr = []; paramKeys.forEach(function (value, key) { let typeVal = typeof(param[value]); if (value!='sign' && param[value] !== undefined && param[value] !== null && param[value] !== '' && typeVal!=='object' ){ let oneItem = value+'='+param[value]; paramArr.push(oneItem); } }); let paramStr = paramArr.sort().join("&"); let secretKey = '11111111111111111111111'; //与后端secretKey保持一致 return CryptoJS.HmacSHA256(paramStr, secretKey).toString(); }
2. 后端验证签名
在PHP后端接口入口处, 或中间件中加入验签方法
function checkSign($params) { $sign = $params['sign']; unset($params['sign']); ksort($params); foreach ($params as $paramKey => $paramVal) { if(is_array($paramVal) || $paramVal === null || $paramVal === '')continue; $paramStr .= $paramKey.'='.$paramVal.'&'; } $paramStr = substr($paramStr, 0, -1); $secretKey = '11111111111111111111111'; //与前端secretKey保持一致 $mySign = hash_hmac('sha256', $paramStr, $secretKey); if($mySign!==$sign) { throw new \Exception('异常请求', 403); } }
评论