JWT--无状态单点登录

序言

传统的 seesion 认证存在的问题:

1)用户信息存储在内存中,用户规模大之后增加服务器开销;
2)由于登录信息存储在内存中,限制了登录机器,不利于分布式站点。

JWT

JWT无状态登录

常规的 JWT 认证流程如下如:

 

刷新Token

 

 

单顶级域名下的单点登录

 

多顶级域名下的单点登录

基于 cookie 的单点登录模式有一个弊病在于,其对应的多个站点的顶级域名必须相同。

JWT小结

JWT的缺陷

JWT使用起来虽然简单方便,但它存在一个设计缺陷,即服务端无法主动注销token,所以jwt在安全性上不及session,实际开发中应谨慎使用。

如果要让服务端能够注销token,就要在服务端维持token状态,这又回到session机制了,所以在经常需要验证的场景中,建议还是使用session。

JWT这个缺陷决定了它更适合用在一次性token验证场景中,即token只使用一次就立即废弃掉,比如第三方登录授权。

适合使用jwt的场景

有效期短,只希望被使用一次,比如,验证码,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性(通常只允许几小时之内激活),不能被篡改以激活其他可能的账户,一次性的。这种场景就适合使用jwt。

而由于jwt具有一次性的特性。单点登录和会话管理非常不适合用jwt,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。

资料

八幅漫画理解使用JSON Web Token设计单点登录系统

基于 JWT 的单点登录设计 xuxiangwork

posted @ 2019-04-24 14:05  ~沐风  阅读(1445)  评论(0编辑  收藏  举报