先後端分離——token超時刷新策略

前言

記錄一下先後端分離下————token超時刷新策略!前端

需求場景

昨天發了一篇記錄 先後端分離應用——用戶信息傳遞 中介紹了token認證機制,跟幾位羣友討論了下,有些同窗有這麼一個疑惑:token失效了,應該怎麼作?強制定向到登陸頁?java

其實理論上若是是活躍用戶,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;

}

具體返回字段的意義請看註釋,這裏再簡要說明:spa

  • jwt:用戶正常訪問接口時提交的token,過時時間設置長一些,15day吧
  • refreshJwt:刷新token 過時時間能夠設置爲jwt的兩倍,甚至更長,用於動態刷新token時候提交後臺驗證
  • tokenPeriodTime:token過時時間戳,前端每次調用接口前須要主動判斷是否已通過期,若是過時則提交refreshJwt訪問token刷新的接口進行刷新

動態刷新token

前端檢測到token過時後,攜帶refreshJwt訪問後臺刷新token的接口,服務端在攔截器中依然對refreshJwt進行解析鑑權3d

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

總結

  • 若是是活躍用戶,那麼容許他在refreshJwt過時時間與token過時時間的差值這段時間內,不停的動態刷新token,使其作到無感知的狀態下一直保持登陸狀態
  • 若是用戶不活躍,在refreshJwt過時時間到了,依然沒有使用系統,那麼將斷定爲不活躍用戶,此時應當重定向到登陸頁了

最後

篇幅較短,主要是延續上一篇 先後端分離應用——用戶信息傳遞 遺留問題作一下總結。若是你有更好的作法,歡迎留言告知我,謝謝啦。後續會不按期更新原創文章,歡迎關注公衆號 「張少林同窗」!code

相關文章
相關標籤/搜索