✅ 场景:接口调用时校验请求是否合法、防止伪造
🌟 整体流程逻辑图解:
第一阶段:用户注册实名阶段(初始化)
-
用户在业务系统注册实名。
-
业务系统为用户生成并分配一对凭证(密钥对):
-
id:用户唯一标识(如userId、appId) -
secret(或称password):密钥(用户必须保管好)
-
第二阶段:用户调用接口(鉴权流程)
🔐 前端操作:
-
前端获取当前时间戳或生成一个随机数
random(例如 6 位或 16 位字符串)。 -
前端使用一个约定的加密算法(如
HMAC-SHA256(secret, id + random)或MD5(secret + random))进行加密,得到sign。 -
前端调用接口时提交以下参数:
-
id -
random -
sign(加密后的签名)
-
🔍 后端验证流程:
-
后端接收到接口请求,提取参数:
id、random、sign。 -
后端通过
id获取该用户对应的secret。 -
后端拼接相同规则的字符串,例如:
secret + random。 -
后端使用相同的加密算法生成
serverSign。 -
后端对比:
-
如果
sign.equals(serverSign):-
鉴权通过,允许调用接口。
-
-
否则:
-
鉴权失败,返回错误信息(如 401 未授权)。
-
-
✅ 示例流程(伪代码)
前端生成签名:
const sign = md5(secret + random);
后端验证签名:
String secret = getSecretById(id);
String serverSign = md5(secret + random);
if (serverSign.equals(signFromRequest)) {
// 鉴权成功
} else {
// 鉴权失败
}
3933

被折叠的 条评论
为什么被折叠?



