看了很多方案,都不是自己想要的,结合其他同学方案,自己也总结了一个方案记录下
总的来说就是用RSA + AES 加密方案
接口应用分两步:
一 登录
二 业务接口调用
一 登录
流程概要说明下
1 客户端请求服务器接口获取服务器端RSA秘钥对的公钥(ser_pub_key)(服务器端不定时更换RSA秘钥对)
2客户端自己也生成自己的RSA秘钥对,并用ser_pub_key 加密 用户登录id、 用户登录密码 以及客户端RSA 的公钥(cli_pub_key),然后请求登录接口
3 服务器端用自己的私钥(ser_pri_key)解密,得到明文后进行登录流程。登录成功后,生成AES秘钥(aes_secret)并存缓存(也可以用jwt的方案,要将aes_secret加到token--要加密),另再生成一个token, 将 aes_secret 和 token用客户端公钥 cli_pub_key 加密并返回
4 客户端将响应结果用自己的私钥cli_pri_key解密,得到token 和AES的秘钥aes_secret,登录 流程结束
二 业务接口调用
1客户端用AES秘钥加密请求参数,附加 token请求业务接口
2 服务器根据token或取AES秘钥,解密请求参数,获取明文参数
以上只是大的思路,整个接口安全设计实现还包括防止重放、失效、串改