SpringCloud的項目用JWT做身份驗證,對於token過期時間的刷新策略整理如下圖:
![]()
刷新策略
在登錄接口中返回兩個token,一個是用來請求業務接口驗證身份信息的accessToken,一個是過期后用來獲取新的token的refreshToken,refreshToken中不攜帶權限等信息,因為不需要讓refreshToken去請求業務接口,只用來獲取新的token,refreshToken的過期時間相對長一些,accessToken的過期時間相對短一些,這一點根據自己的業務來定。
當客戶端用accessToken請求業務接口收到【證書過期】的時候,攜帶着refreshToken去請求【刷新token】的接口,該接口重新設置兩個token的過期時間然后返回給客戶端,注意:不要改變兩個token中存放的信息,重新設置過期時間的代碼如下:
設置過期時間
獲取JWT主體
注意這里的setAllowedClockSkewSeconds方法,如果不設置這個時間,一旦你的token過期了,你在獲取JWT主體的時候就會報錯,JWT的源碼如下:
JWT過期拋異常
所以即使你的accessToken過期了,你也應該允許獲取到主體的信息以方便刷新,setAllowedClockSkewSeconds的時間應該跟你的refreshToken的過期時間是一樣的,此處也可以根據具體業務自行斟酌。