架构设计全栈开发Springboot

Token的更新策略

2019-07-14  本文已影响685人  精致的吴彦祖

在单台服务器中,我们的用户认证大部分采取的是session(会话),但如果是一个集群的服务器架构呢?就得要做session共享,多个服务共享一个session,这样就可以确保集群服务器架构(多台服务器)使用一个session,或者我们还可以使用Token来做登录认证,使用Token+Redis这两者一起实现一个完整的登录认证。

Session共享咱们以后再讲,今天我们来说说Token+Redis怎么做登录认证。

先给大家简单的介绍什么是JWT,JWT全称为(JSON WEB TOKEN),是目前流行做登录认证的工具之一,它是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之前传递安全可靠的信息。它的两大使用场景就是做认证和数据交换。

详细的JWT我在这不做详解,留在下一篇。今天要说的是JWT的认证,也就是使用JWT来生成Token,并且客户端使用Token来访问我们其他需要用户认证的接口。

其实JWT生成的就是一段字符串,JWT生成的Token由三部分组成:Header,Payload,Signature。详细的情况自行去了解,在这不做阐述。今天咱们主要是讲Token的更新策略。

咱们生成Token的场景是在用户登陆成功时生成的,如果用户每次登陆时都要生成一个Token,那么在高并发场景下是十分不好的,而且也容易被人恶意攻击,咱们就可以使用本店缓存方案来做Token更新策略。

JWT生成的Token是有一个有效期机制的,设置了30分钟那么这个Token就是30分钟,如果用户这30分钟总是在活跃在我们的WEB网站上,那么在第31分钟就得要去重新登录一次,这样给用户的体验是极差的,而且跟咱们单台服务器使用的Session有效期机制也是不一样的。

本地缓存咱们可以采取Redis系统,现在市面上最流行的内存数据库。使用Redis来做Token的更新策略主要流程,可以先看看以下的图。

这张图的主要思路就是:用户携带账号密码访问后端校验,校验成功后生成Token,并且给Token设置有效期,并且把Token放入至Redis中,redis中的有效期一定要比Token的有效期大。当用户访问接口时,如果token已经失效了,则去redis中查找,redis有该token则生成一个新的token,替换掉已经失效的token,redis的有效期时间则重新设置为60分钟。如果redis中没有该token,说明该token已经在redis失效或者是无效token,则告知用户重新登录。

觉得写得好的可以关注微信公众号:请快点喜欢我

上一篇 下一篇

猜你喜欢

热点阅读