栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringSecurity OAuth2 资源服关于JWT Token和Redis Token的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringSecurity OAuth2 资源服关于JWT Token和Redis Token的区别

前言

这是一篇关于SpringSecurity OAuth2细节对比的文章,我是在同一个授权服的情况下,资源服分别采用不同的TokenStore策略,获取Authentication,准去的说是在获取authentication.getPrincipal()的时候我发现JWTStore 和RedisStore得到的数据是不一样的,那么这就引起了我的好奇心!
基于Redis的Store

基于JWT的Store

接口代码如下
两个资源服都有这个一样的接口!

	@GetMapping(value = "/getPrincipal")
    public R getPrincipal(Authentication authentication) {
        return R.ok(authentication.getPrincipal());
    }
源码分析

前面主流程都是差不多的,在DefaultTokenServices中,出现了区别

基于Redis的Store
基于redis的那么这里的tokenStore是RedisTokenStore对象

RedisTokenStore是通过deserializeAuthentication方法将Redis中的数据序列化后变成OAuth2Authentication对象的

基于JWT的Store
基于redis的那么这里的tokenStore是JwtTokenStore对象

JwtTokenStore是通过extractAuthentication方法将jwtTokenEnhancer.decode(token)解析好token中的数据得到map,然后组装成
OAuth2Authentication

总结

那么实际上造成不同的Store得到的Authentication对象不同就是上面两个对比,不过这个问题是个伪命题,因为正常情况下,资源服的Store应该个授权服保持一致,即使授权服采用Redis方式,资源服可以采用JWT或者Redis两种,那么资源服最好都同一,要么都使用JWT,要么都是用Redis,那么这样就能得到同样的Authentication同时这也验证了问题

因为基于JwtTokenStore的会通过


接上面那篇文章中的自定义JWTToken模板信息转换器CustomJWTTokenConverter,最终才会调到这里

但是基于Redis的确实没有这个流程,所以这种形式的全局解析器是必须要使用JwtTokenStore的!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/309843.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号