当前位置: 首页 > news >正文

JWT令牌解析及刷新令牌(十一)

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️,满足一下我的虚荣心💖🙏🙏🙏 。

上一篇记录了使用jwt令牌和自定义token携带的信息,本篇继续完善一下令牌的解析和使用refresh_token获取令牌,本篇代码基于上一篇:使用Spring Security OAuth2使用JWT生成token及自定义token携带的信息(十)

目录

Java解析JWT内容

pom依赖

测试类

Postman测试

刷新令牌

环境 

Postman测试


Java解析JWT内容

这里我们使用jjwt的工具包解析JWT的内容。

pom依赖

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.0</version>
</dependency>

测试类

@GetMapping(value = "/jwt")
public Object jwt(HttpServletRequest request) {String authorization = request.getHeader("Authorization");return Jwts.parser().setSigningKey("abc123".getBytes(StandardCharsets.UTF_8)).parseClaimsJws(authorization).getBody();
}

Postman测试

启动我们之前的认证服务和测试服务。

首先,获取token,如下:

localhost:9005/oauth/token?client_id=dev-client&client_secret=123456&grant_type=password&username=zhangsan&password=123456

结果如下:

然后,我们访问JWT解析测试方法 http://localhost:9000/jwt,如下:

结果如下:

如上,已经JWT的内容已经解析出来了。

刷新令牌

下面演示一下token失效时使用refresh_toekn重新获取token的过程。

环境 

我们的客户端信息是保存在数据库的,要想支持刷新令牌,注意oauth_client_details表中authorized_grant_types要包含refresh_token,另外,之前令牌的有效期和刷新令牌的有效期是配置在令牌服务中的,如下:

tokenServices.setAccessTokenValiditySeconds(60);
tokenServices.setRefreshTokenValiditySeconds(3600);

这里咱们配置在数据库oauth_client_details表中,后续客户端信息会做一个管理功能来维护这些信息,为了演示,这里还将令牌有效期设置为30秒,刷新令牌的有效期设置为3600秒,如下:

Postman测试

使用上面的token再次访问  访问JWT解析测试方法 http://localhost:9000/jwt,结果如下:

后台报错信息如下:

 io.jsonwebtoken.ExpiredJwtException: JWT expired at 2023-03-09T09:56:55Z. Current time: 2023-03-09T10:08:47Z, a difference of 712101 milliseconds.  Allowed clock skew: 0 milliseconds.

如上,JWT expired,使用refresh_token重新获取token,如下:

 

 结果如下:

 使用新获取的access_token再次访问 JWT解析测试方法 http://localhost:9000/jwt,就可以在再次访问了。

http://www.lryc.cn/news/36642.html

相关文章:

  • Hibernate学习(一)
  • Go的 context 包的使用
  • 微服务为什么要用到 API 网关?
  • SWUST OJ 1042: 中缀表达式转换为后缀表达式【表达式转逆波兰表达式】
  • Matlab基础知识
  • 动手学深度学习【2】——softmax回归
  • 深入理解Activity的生命周期
  • Go语言刷题常用数据结构和算法
  • 深入vue2.x源码系列:手写代码来模拟Vue2.x的响应式数据实现
  • Linux线程控制
  • 【LeetCode】剑指 Offer(20)
  • FutureTask中的outcome字段是如何保证可见性的?
  • 直播回顾 | 聚焦科技自立自强,Bonree ONE 助力国产办公自动化平稳替代
  • 深入理解Linux进程
  • Vue3之组件间的双向绑定
  • Java语法基础(一)
  • 优思学院|零质量控制是什么概念?
  • 2023-03-09 CMU15445-Query Execution
  • vuedraggable的使用
  • 双馈风力发电机-900V直流混合储能并网系统MATLAB仿真
  • leader选举过程
  • 建造者模式
  • IO与NIO区别
  • 无监督循环一致生成式对抗网络:PAN-Sharpening
  • ArrayList源码分析(JDK17)
  • 数字IC/FPGA面试笔试准备(自用待填坑)
  • 基于多任务融合的圣女果采摘识别算法研究
  • 又一个开源第一!飞桨联合百舸,Stable Diffusion推理速度遥遥领先
  • 数据链路层及交换机工作原理
  • VSCode 开发配置,一文搞定(持续更新中...)