jwt+token,springsecurity认证方式总结
基于redis的认证方式分析
redis解决短信验证码时效性,以及使用token的方式判断是否登录的问题。(没用jwt)
这里面使用两个拦截器的方式解决:1. 给token有效期刷新 2.判断用户是否已登录
目前验证用户是否已登录,仍然是用到redis和服务端程序去判断,这个和使用session的判断方式有点相似,因为也会用到服务端资源。
但是token与session还是有非常大的不同,认证通过后,(认证信息)session都是保存在内存中(服务端服务器中)占内存,如果是分布式的架构,那么也会影响性能。
而对于token的方式,认证通过后,(认证信息)token都是保存在redis中的,即使是分布式系统,对于该token都能拿到。也就实现了单点登录 就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录。
且能控制用户登录状态的。
jwt分析
头部,载体,签名
服务端根据秘钥信息,生成jwt(token),将token作为数据返回,然后用户每次请求过来都在请求头携带该token。
如果用户携带token过来,服务端会用秘钥去解析该token,看是否通过。如果通过则代表该用户已登录。
key-value : token-userInfo 存入redis中
可以控制该token的有效期(也就是用户登录的有效期),且能够将用户的一些信息保存到redis中
用户请求到达服务端,服务端根据秘钥再签发一个jwt(token),与用户携带的token作比较,如果一致,则再去操作redis
security认证授权分析
认证流程:
调用框架方法,重写登录认证逻辑,JWT的载体可以存东西
将token返回给用户,让他每次访问都携带过来。
而解析token能得到它里面的载体,包含key的信息,能根据这个条件去redis中查找用户是否已经登录已经他的权限信息。
要让用户注销,那么就删除redis中的对应k-v,那么如果它再想请求需要登录才能访问的接口,会被jwt拦截器给拦截住。
每次用户访问需要登录才能访问的接口时,都会走jwt拦截器这么一个流程。
网上看到的解决方案,就是将权限信息也放在jwt的载体中,而不是redis的v中。这样符合逻辑吗?
答:不行。1.此时的放redis中起到一个单点登录,且能做登录超时下线的功能,能够控制用户的状态。只使用jwt的话,是无法控制用户登录状态的。
如果需要给这个方案加一个token刷新机制呢?
加一个过滤器,拦截所有请求,且在jwt过滤器之前执行。实质上就是刷新该用户对应于redis中的key。
如果请求头中没有携带token => 直接放行
如果携带了 => 那么jwt解析token => 去redis中操作 => 判断该key是否过期
=> 是,放行
=>否,更新token有效期
再次回顾了security的知识,三更的那个jwt过滤器是必要的,这种方式和session的方式还是具有区别。
- 对于session的方式,(认证信息)session都是保存在内存中(服务端服务器中)占内存
- 对于token的方式,认证通过后,(认证信息)token都是保存在redis中的
- 且重新整合加入了token刷新机制
相关文章
- 从本体论开始说起——运营商关系图谱的构建及应用
- 如何成为一名数据科学家?
- 从未见过的堂兄杀了人,你的DNA是关键证据
- 20个安全可靠的免费数据源,各领域数据任你挑
- 20个安全可靠的免费数据源,各领域数据任你挑
- 阿里云李飞飞:All in Cloud时代,云原生数据库优势明显
- 基于Hadoop生态系统的一高性能数据存储格式CarbonData(性能篇)
- 大数据告诉你:10年漫威,到底有多少角色
- TigerGraph:实时图数据库助力金融风控升级
- Splunk利用Splunk Connected Experiences和Splunk Business Flow 扩大数据访问
- 大数据开发常见的9种数据分析手段
- 以免在景区看人,我爬了5W条全国景点门票数据...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
- 数据科学家告诉你哪些计算机科学书籍是你应该看的
- Kafka作为大数据的核心技术,你了解多少?
- Spring Boot 整合 Redis 实现缓存操作
- 大数据学习必须掌握的五大核心技术有哪些?
- 基于Antlr在Apache Flink中实现监控规则DSL化的探索实践
- 甲骨文再次被Gartner评为分析型数据管理解决方案魔力象限领导者
- 爬取吴亦凡微博102118条转发数据,扒一扒流量的真假