前面整合了jwt,今天分析下jwt的优劣。
jwt的无状态认证特别适合现在的分布式和多终端的单点登录,但是它也有弊端,比如:token续签和token失效的问题。下面就详细分析下:
优点
1、无状态
jwt生成的token 自身包含了身份验证所需要的所有信息,使得我们的服务器不再需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。jwt的无状态是它的最大优势,特别适合分布式。
2、适合单点登录(适合移动端)
我们都知道,session为有状态认证,它需要在服务器中存储一份session。同时,客户端为了存储sessionId需要使用cookie。如果跨终端操作,用session就比较复杂。而使用jwt,生成的token,终端拿到这个token之后存储在localstorage等地方。之后每次请求,取这个token放入请求的header中去验证就行了。
缺点
1、token无法主动失效
由于 token 的无状态设计,导致了它最大的缺点:当后端在token 有效期内废弃一个 token 或者更改它的权限的话,不会立即生效,一般需要等到有效期过后才真正的废除掉这个token。另外,当用户 Logout 的话,token 也还有效。除非,我们在后端增加额外的处理逻辑。
2、token无法自动续签
由于实际项目中,token的有效期时间不宜设置过长,但是项目经理又要求在一定时间内(大于token的有效期)用户免登陆。这种场景下,jwt就无法完成token的自动刷新,因为token失效后需要重新登录去重新生成一个新的token, token的有效期无法自动延长。
网友评论