• 欢迎访问 winrains 的个人网站!
  • 本网站主要从互联网整理和收集了与Java、网络安全、Linux等技术相关的文章,供学习和研究使用。如有侵权,请留言告知,谢谢!

关于token认证

Session winrains 来源:猫窝 1年前 (2019-08-31) 47次浏览

Token认证

很多时候我们都需要要保存一个用户登录状态,这时候比较不错的一个选择就是token了。

用Token有哪些好处

  1. 便于应用管理,容易的在后台管理状态,同时可以避开同源策略。
  2. 防止csrf攻击
  3. token中可以保存用户状态,也可以无状态。也可以在多个服务器共享。

token一般是由服务器产生的,由服务器签发给前台,前台拿着token令牌后台辨别用户。常见应用场景就是用户登录到完成这段业务,前台发送user,pass后端验证正确性,给前台签发token,在后面的业务中前台操作中都带着token就可以识别用户是否登录了。

考虑

这么个流程确实可以实现,但是这个token要不要持久存储呢?要知道这个token令牌只要存在就可以表名当前持有者是登录状态的。

那么,要不要设置有效期呢?

要的!想一想,腾讯qq是不是经常提醒修改用户密码,这是出于安全考虑,不应该长时间使用同一个令牌(密码)

token有效期多长合适

首先要尽可能的短一点,但也不能短的离谱。

然后有了有效期,那么必然会产生一个问题,用户在操作的时候token突然失效,这时候怎么处理?肯定是不能让用户感到token失效的问题。

方案1,刷新,当用户进行操作的时候就推迟token的过期时间。这样可以保证token的一直有效,可是问题来了,像是前后端分离,单页app这些场景中,每秒钟就可能发起很多的请求,也就意味着每次都去刷新过期时间,这样势必会产生非常昂贵的代价。可能有人会想,为什么不把过期时间持久化到数据库或文件,那么代价会更大。所以,为了提升效率,减少消耗可以存储在缓存或者内存中,常见的就是用redis。

方案2,更新token(refresh token),能直接避免频繁读写操作。它的方案是,服务器不用刷新token,它是通知前台token失效,前端一旦得知失效,就使用refresh token到服务器获取一个新的token,服务器对refresh token进行有效性检查。refresh也是有有效期的。

登陆流程

  1. 前端携带着user,pass请求服务器
  2. 服务器验证user,pass通过
  3. 创建refresh token,创建和refresh token关联的token
  4. 返回给前台token和refresh token
  5. 前台使用token,存储refsh token

业务请求

  1. 前台发送业务请求的data数据与token到后台
  2. 后台验证token是否有效,有效则返回,否则发挥失效信息

失效情况下:

  1. 发送请求,携带业务数据与token
  2. 服务器验证失效,返回
  3. 发送refresh token
  4. 认证refresh token成功生成一个新的关联token返回给前台
  5. 前台使用新的token重发请求
  6. 验证成功返回

token有状态:在服务器那边记录着相关的属性

token无状态:服务不保存状态信息只有一个token

作者:猫窝

来源:https://i.nekom.cc/post-746.html


版权声明:文末如注明作者和来源,则表示本文系转载,版权为原作者所有 | 本文如有侵权,请及时联系,承诺在收到消息后第一时间删除 | 如转载本文,请注明原文链接。
喜欢 (2)