系统token的相关问题

不知道大多数系统是怎么样,下面这个关于token验证方法是我自己根据网上的一些建议,还有自己实践做出来的一套token验证方法。

这是最基本的token验证方法,根据这个方法做了一些改进。

基于 Token 的身份验证方法

大概的流程是这样的:

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

改进后的token身份验证方法

  1. 客户端收集用户的手机特征码与用户输入的帐号和密码,经过RSA加密后,输送给服务端
  2. 服务端收到后,对私钥解密出特征码和帐号密码,然后查询mysql
  3. 验证成功后,服务端会生成一个token,返回token给客户端,并且服务端会把该token保存在redis数据库里,设置1800过期时间
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  6. 服务端收到请求,查找redis是否存在或是否过期,如果有并且没有过期就通过,返回请求数据,如果过期时间小于900,在返回值里会多一个token字段,客户端每次请求需要判断token字段是否存在,存在就更新

注解:

  • 由于我的系统只针对特定用户,每个用户都与手机绑定,只有用绑定手机才能登陆
  • 设置过期时间也是基于安全考虑,如果用户超过1800没有动作,token就失效。
  • 当时想到的第一步RSA加密主要是解决监听问题,虽然已经升级到https,但是这样会更安全,就算被监听到也不会有用,这样只是为了增加难度,增加破解成本,如果成本比获得的利益高,那破解就没多大意义,并不是为了防破解。

建议:当时想这个花了点时间,如果想快速开发,可以不加密,也没什么问题,系统没有达到一个量级不会有什么人来破解,还是那句话,大多数公司死在自我优化的过程中。不过写好后有了这框架后续也方便了。

说起来一大堆费话,其实也就这图上这么点东西

系统token的相关问题_第1张图片
image

老有人问我具体的代码,其实很多时候别人都只是给个思路,具体的方法还是要自己去解决。

由于我还有下位机也需要访问服务器,是用python写的,原理也是一样

这是手机端用js实现

系统token的相关问题_第2张图片
image

这是下位机,用python

系统token的相关问题_第3张图片
image

你可能感兴趣的:(系统token的相关问题)