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

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

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

目录

Java解析JWT内容

pom依赖

测试类

Postman测试

刷新令牌

环境 

Postman测试


Java解析JWT内容

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

pom依赖


    io.jsonwebtoken
    jjwt
    0.9.0

测试类

@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令牌解析及刷新令牌(十一)_第1张图片

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

JWT令牌解析及刷新令牌(十一)_第2张图片

结果如下:

JWT令牌解析及刷新令牌(十一)_第3张图片

如上,已经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,结果如下:

JWT令牌解析及刷新令牌(十一)_第4张图片

后台报错信息如下:

 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,如下:

JWT令牌解析及刷新令牌(十一)_第5张图片

 JWT令牌解析及刷新令牌(十一)_第6张图片

 结果如下:

JWT令牌解析及刷新令牌(十一)_第7张图片

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

你可能感兴趣的:(Spring,安全)