有感而写。。记录一下权限认证思路
实现登录功能时,权限认证是必不可少的。常用到Shrio+JWT来实现认证。认真思路如下:
1.前端将用户名、密码等信息请求到服务端。
2.服务端接到该请求头,并加密为JWT(JSON WEB TOKEN),并将token返回给前端,并且将该token存到缓存中(可以是redis),用于令牌刷新。这里注意token的有效时间。
3.前端拿到token后存到浏览器。在之后的业务请求时,请求头带上token,访问网关服务。
4.网关服务接到请求后,jwt解析请求头令牌,并将令牌发送给认证中心。认证中心以shiro为例,shiro不能直接使用该token字符串,需要对token进行封装(注意这里会用到OAuth2标准)。
5.shiro拿到封装后的token进行判断是否有效。如果有效,那么请求继续;如果无效,请求终止。
6.考虑一个场景:token有效时间加入为8小时,用户在8小时之后,按正常情况来说是不可以发出请求的。但是这样做用户体验会降低!!那么怎样优化呢?第2条讲到将token放redis的作用来了!
7.一般放到缓存中的token数据,设置的过期时间是客户端token过期时间的两倍。当用户在前端服务发起请求,认证中心验证token失效后,会到redis中查询该token数据是否存在,如果存在,那么JWT刷新token,并重新返回给前端。如果redis中token不存在,说明过期时间超过两倍,那么需要用户重新登录。这样友好的解决了用户在使用过程中token失效需要重新登录的问题。
放个图片加深理解:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐