天天看点

互联网小产品开发之(4)基于JWT的登录认证设计

我打算利用业余时间,做个小互联网产品来运营玩玩。目的是打发时间,学习并实际使用新技术,写此系列文章作为记录。不保证开发进度,不定时更新,看时间和心情。各位看官欢迎交流,希望不吝赐教,大家共同进步。

JWT,全称是JSON WEB TOKEN,是一个开放的标准协议,我第一次接触还是用node做后端服务的时候。想了解更多朋友可以自行搜索了解。

这里我想介绍下我设计的登录认证的过程,如果有什么漏洞或者高见,欢迎评论交流。

互联网小产品开发之(4)基于JWT的登录认证设计

登录认证设计思考历程

一开始我觉得session就够用嘛,我又不是做APP。但是有效期不能设置太长,毕竟占内存。

然后又想到自定义token认证,曾经我设计过一套token认证,用Redis存储,每次http响应回去给前端一个新的,旧的token2分钟内失效,最新的那个7天内有效。可以支持多端登录,也支持单端登录(就像以前QQ只允许登录一个手机)。这套token确实也不错,但是也占内存,我服务器资源有限,不得不慎重考虑。

思来想去,我还是不要造轮子了,用JWT吧,存储成本分散到客户端上,服务器验证一下就好了。

设计思路

说到认证的设计,不得不想到“角色”、“权限”的设计,我这个小产品,初步设计了3个角色。

  • 超级管理员 - 拥有最高权限
  • 管理员 - 有用小区的管理权限,用在后台管理系统。
  • 普通用户 - 用在公众号H5应用,移动端

我们都知道jwt的payload可以放信息,我设计放置上面说的角色,还有用户的openid

互联网小产品开发之(4)基于JWT的登录认证设计

json web token生成

JWT的结构设计完成,可以思考在什么时候发放jwt,什么时候刷新jwt了。

直接说结论,经过小小的迭代,我最终的设计如下:

互联网小产品开发之(4)基于JWT的登录认证设计

微信登录+jwt认证

文字再简述一下关键点:

  1. 先走微信登录流程,在后端最后重定向回前端之前,先在session里存一下jwt。
  2. 前端再次发请求,虽然没带上jwt,但是后端知道你有,并把它放到响应头。
  3. 前端拦截每个响应头,发现有jwt,就刷新本地的jwt并在下次带上。
  4. 后端在jwt快过期的时候,会重新生成一个新的jwt给前端,通过响应头返回。

大家有没更好的方式?欢迎讨论

继续阅读