xuanbg
2019-08-27 13:35:33 +08:00
增加一个获取 code 的接口,服务端生成一个一次性的随机字符串,和用户名、密码一起计算出一个签名,算法可以简单地使用:md5(md5(passwd+account)+code),因为服务端的密码已经是 MD5 值了,所以不需要再次 md5。签名结果作为 key 保存在 redis 中(value 可以是用户 ID),然后把这个 code 返回前端。前端使用 md5(md5(md5(passwd)+ account)+code)算法就能计算出相同的签名。只需要把这个签名作为登录的唯一参数传给后端进行验证即可。后端拿这个参数去 redis 中找这个 key,找到就是验证成功。如果用户名、密码、code 任何一个参数对不上,都无法计算出正确的签名,也就不能通过验证。
中间人只能拿到用户名和 code,永远拿不到任何形式的密码。所以即使数据不加密,也是安全的。只要签名是一次性的,中间人拿到签名也没用。既不能用来登录,也无法还原出密码。