建設(shè)網(wǎng)站思路青島seo排名公司
寫在前面:各位看到此博客的小伙伴,如有不對的地方請及時(shí)通過私信我或者評論此博客的方式指出,以免誤人子弟。多謝!如果我的博客對你有幫助,歡迎進(jìn)行評論????、點(diǎn)贊👍👍、收藏????,滿足一下我的虛榮心💖🙏🙏🙏 。
上一篇記錄了使用jwt令牌和自定義token攜帶的信息,本篇繼續(xù)完善一下令牌的解析和使用refresh_token獲取令牌,本篇代碼基于上一篇:使用Spring Security OAuth2使用JWT生成token及自定義token攜帶的信息(十)
目錄
Java解析JWT內(nèi)容
pom依賴
測試類
Postman測試
刷新令牌
環(huán)境?
Postman測試
Java解析JWT內(nèi)容
這里我們使用jjwt的工具包解析JWT的內(nèi)容。
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測試
啟動(dòng)我們之前的認(rèn)證服務(wù)和測試服務(wù)。
首先,獲取token,如下:
localhost:9005/oauth/token?client_id=dev-client&client_secret=123456&grant_type=password&username=zhangsan&password=123456
結(jié)果如下:
然后,我們訪問JWT解析測試方法 http://localhost:9000/jwt,如下:
結(jié)果如下:
如上,已經(jīng)JWT的內(nèi)容已經(jīng)解析出來了。
刷新令牌
下面演示一下token失效時(shí)使用refresh_toekn重新獲取token的過程。
環(huán)境?
我們的客戶端信息是保存在數(shù)據(jù)庫的,要想支持刷新令牌,注意oauth_client_details表中authorized_grant_types要包含refresh_token,另外,之前令牌的有效期和刷新令牌的有效期是配置在令牌服務(wù)中的,如下:
tokenServices.setAccessTokenValiditySeconds(60);
tokenServices.setRefreshTokenValiditySeconds(3600);
這里咱們配置在數(shù)據(jù)庫oauth_client_details表中,后續(xù)客戶端信息會(huì)做一個(gè)管理功能來維護(hù)這些信息,為了演示,這里還將令牌有效期設(shè)置為30秒,刷新令牌的有效期設(shè)置為3600秒,如下:
Postman測試
使用上面的token再次訪問? 訪問JWT解析測試方法 http://localhost:9000/jwt,結(jié)果如下:
后臺報(bào)錯(cuò)信息如下:
?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,如下:
?
?結(jié)果如下:
?使用新獲取的access_token再次訪問?JWT解析測試方法 http://localhost:9000/jwt,就可以在再次訪問了。