前後端分離——token超時重新整理策略

張少林同學發表於2019-03-04

前後端分離——token超時重新整理策略

前言

記錄一下前後端分離下————token超時重新整理策略!

需求場景

昨天發了一篇記錄 前後端分離應用——使用者資訊傳遞 中介紹了token認證機制,跟幾位群友討論了下,有些同學有這麼一個疑惑:token失效了,應該怎麼做?強制定向到登入頁?

其實理論上如果是活躍使用者,token失效後,假如使用者正在操作表單,此時突然定向到登入頁面,那使用者體驗太差了。

實現目標

  • 延長token過期時間
  • 活躍使用者在token過期時,在使用者無感知的情況下動態重新整理token,做到一直線上狀態
  • 不活躍使用者在token過期時,直接定向到登入頁

登入返回欄位

如何簽發token,請看上一篇推文,這裡不做過多介紹。先看看登入介面返回的資料如下:

@Data
public class LoginVo implements Serializable {

    private static final long serialVersionUID = 6711396581310450023L;

    //...省略部分業務欄位
    
    /**
     * token令牌 過期時間預設15day
     */
    private String jwt;
    
    /**
     * 重新整理token 過期時間可以設定為jwt的兩倍,甚至更長,用於動態重新整理token
     */
    private String refreshJwt;
    
     /**
     * token過期時間戳
     */
    private Long tokenPeriodTime;

}
複製程式碼

具體返回欄位的意義請看註釋,這裡再簡要說明:

  • jwt:使用者正常訪問介面時提交的token,過期時間設定長一些,15day吧
  • refreshJwt:重新整理token 過期時間可以設定為jwt的兩倍,甚至更長,用於動態重新整理token時候提交後臺驗證
  • tokenPeriodTime:token過期時間戳,前端每次呼叫介面前需要主動判斷是否已經過期,如果過期則提交refreshJwt訪問token重新整理的介面進行重新整理

動態重新整理token

前端檢測到token過期後,攜帶refreshJwt訪問後臺重新整理token的介面,服務端在攔截器中依然對refreshJwt進行解析鑑權

  • 假如refreshJwt也過期了,提示登入過期,強制跳轉登入頁
  • 假如refreshJwt還在有效期,則簽發新的token返回,前端使用最新的token進行介面請求

總結

  • 如果是活躍使用者,那麼允許他在refreshJwt過期時間與token過期時間的差值這段時間內,不停的動態重新整理token,使其做到無感知的狀態下一直保持登入狀態
  • 如果使用者不活躍,在refreshJwt過期時間到了,依然沒有使用系統,那麼將判定為不活躍使用者,此時應當重定向到登入頁了

最後

篇幅較短,主要是延續上一篇 前後端分離應用——使用者資訊傳遞 遺留問題做一下總結。如果你有更好的做法,歡迎留言告知我,謝謝啦。後續會不定期更新原創文章,歡迎關注公眾號 「張少林同學」!

前後端分離——token超時重新整理策略

相關文章