雙token+redis(token無感刷新)

爲什麼要使用雙token+redis呢?單token+redis+自動續期不行嗎?

單token+redis的缺點:

可能會出現用戶正在操作的時候,token過期了,讓用戶重新登錄的情況。

單token+redis+自動續期的缺點:

單token設置短期的話,雖然一直操作可以通過攔截器重置token過期時間讓它續期,但是如果隔一會兒不操作不續期,超過過期時間就過期了,那麼用戶需要重新登錄,體驗不好。

單token設置長期的話,就會有被盜用的風險。

如果是自動續期還是同一個token,那麼token過期時間延長變成長期token那麼還是會有盜用的風險。

如果是自動續期的時候刷新token,那麼是攔截器是否需要返回新的token給前端,重新發起請求?(長期的自動續期有盜用風險,短期的自動續期如果隔會兒不操作還是會有重新登錄的問題)

那麼有沒有一種實現方式既能活躍用戶長時間登錄,token還能安全不被盜用呢?

引入refresh token,就解決了【access token設置時間比較長,容易泄露造成安全問題,設置時間比較短,又需要頻繁讓用戶授權】的矛盾。

使用雙token無感刷新:

雙token:一個短期token,一個長期token。

短期token爲訪問token。

長期token爲refreshToken。當短期token過期,前端發起請求刷新token接口入參爲refreshToken,用來獲取新的短期token,同時獲取新的refreshToken返回給前端。(刷新token和refreshToken都是爲了防止兩種token永不過期並且一直重複會被盜用)

刷新token接口中處理:校驗refreshToken是否存在redis中,如果存在則刷新token和refreshToken返回前端(短期token刷新token和過期時間。長期token刷新token,是否刷新過期時間(續期)呢?)。前端用新的token訪問。

如果不存在則返回未登錄,讓前端轉去登錄。

關於refreshToken是否續期的問題:

如果不續期,那麼最終refreshToken會過期,可能導致用戶正在操作的時候,強制重新登錄。

如果續期,用戶經常活躍的話,accessToken和refreshToken都會進行續期,用戶可以一直在線。不會被強制重新登錄。

當用戶長時間不活躍的話,即refreshToken長時間不刷新過期時間,下次訪問就會在refreshToken過期時,強制重新登錄。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章