用户登录策略

Posted by Shen Chaoran on October 31, 2017
  • 后台一定要加密,并且最好用不可逆的加密,如MD5和SHA1
  • 每个页面都需要登录信息验证,因此,要将登录信息存放在cookie中。在cookie中保存的登录信息遵循以下原则
    • 不存密码,不管是加密的还是未加密的。
    • 正确设计“记住密码”
    • cookie应有一个作用域限制,在作用域之外的请求,不带上cookie
  • 登录的最终目的是获取用户个人信息,但是登录方式可能有很多种,所以User表和Authority表分开放。每多一种认证方式,就多建一张认证表
  • 使用Json Web Token

一种实现方式

cookie保存的信息:

  • username:
  • login_series:
  • token:
  • expired:

使用JWT

JWT实现的时候,一般会有两个过期时间 第一个是Token本身的过期时间,这个时间一般1到2个小时,不能太长,也可以在短一点 第二个是Token过期后,再次刷新的有效期,也就是Token过期后,你还有一段时间可以重新刷新,把过期的Token发给服务端,如果没有过刷新截止期,则服务端返回一个新的Token,不再需要通过用户名密码重新登录获取Token了。 所以为了减少过期后重新获取Token所带来的麻烦,我们一般在每次Http请求成功后,将目前的Token刷新,然后可以在Http响应中返回新的Token。

JWT由于过期数据(exp claim)是封装在Payload中的,所以必须返回一个新Token,而不是在旧Token的基础上刷新。

但是在并发的时候也会出现问题,如果前一个请求刷新了Token(为了安全,刷新后一般会把旧Token加入黑名单),后面的请求使用了一个旧的Token像服务请求数据,这个时候请求会被拒绝。

可以说这真的是JWT的一个缺陷,目前没有特别好的办法来解决并发刷新的问题。

不过可以通过设置一个宽限时间,在Token刷新后,如果旧Token仍处于刷新宽限时间内,就放行。

Reference