可实现接口调用防抓包,防篡改,防重发攻击,
1.服务端配置一对RSA密钥对,公钥pubkey_server,私钥prikey_server,并将pubkey_server写到web端js中
2.web端打开登录页,生成一对RSA密钥对,公钥pubkey_client,私钥prikey_client
3.登陆操作:
a.web端用pubkey_server加密如下信息,调用服务端登陆方法
{
loginname:'admin',
password:'123456',
pubkey_client:'这是pubkey_client'
}
b.服务端用prikey_server解密登陆参数,验证登陆信息,并把pubkey_client保存到服务端缓存
c.服务端生成AES对称加密的key,用pubkey_client加密如下返回结果,返回登陆信息
{
token:'这是认证token',
aeskey:'这是动态生成的aes加密key',
status:'登陆成功'
}
c.web端收到登陆结果信息,用prikey_client解密,拿到token和服务端动态生成的aeskey
4.接口调用:
a.用aeskey加密如下参数调用服务端api接口
{
token:'认证token',
param:'接口参数',
timestamp:'这是一个时间戳',
sign:'签名,对token,param,timestamp做md5运算得到的签名'
}
b.服务端收到web端参数,用对应的aeskey解密,
然后做签名运算,校验是否被篡改,
然后判断时间戳是否在1分钟之内,如果不是提示参数已经过期,
如果是,则写入redis,过期时间1分钟,防止重发调用(拿请求参数判断redis里是否存在,如果存在则是重发的调用)