今天分享JWT Token的用户验证部分,通过这两点细节,应该都可以感受到,橙单对细节的把控,都是极为简单且实用的。
在橙单中,有存在4中请求
- 正常的,需要授权的请求。只有登录用户,且有权访问的用户可以被通过。
- 白名单请求,所有合法登录用户,均可访问,降低权限配置的复杂度。
- 纯免登陆请求,无论登录与否,均可访问。
- 纯免登录请求,登录用户和非登录用户,均可访问,但是不同的用户可以返回不同的数据,举个例子,app首页,没有登录的用户返回缺省的数据,登录用户可以返回个性化数据。
这里有一个细节的处理,在橙单中,我们会尽最大可能,追求极致的效率。所以网关这里,因为是很多请求的入口,所以这里也做了优化,并没有从redis中全部取出,并在网关中比对,这样会增加网关和redis之间的通讯流量,同时也会加大网关的内存压力,而是直接在redis中验证,直接返回是否存在的结果。
其中,白名单url也会在登录的时候存入redis,从而可以极大的简化代码的复杂度。
最后分享一下,JWT Token的续租技术。
出于安全考虑,我们一般不会给JWT的的过期时间设置过长,这个不用讲也是可以理解的。
所以我们一般会设置30分钟左右的JWT过期时间,这样只有当连续30分钟,没有闲置,就是没有和后台有任何交互的时候,就会自动过期。
所以我们提供了自动刷新token续租的功能,否则即便30分钟之内有访问,也会突然要求退出登录,也是没有道理的。
在这里,我们会每五分钟更换一次,因为如果每次请求都更换,会导致网关加密压力过大,引擎tps和qps和并发量。毕竟加密比解密要慢很多,而且更加消耗cpu。
所以我们采取了这种方案,定时更换,比如5分钟更换一次,这个值,是可以配置的
这样的结果是,只有在连续30分钟,没有过请求的才会被要求重新登录。
最终的处理效果就是,安全,高效,灵活