雙token刷新,續期 access_token和refresh_token的


雙token刷新、續期,access_token和refresh_token實效如何設置

token認證,生成的token 過一段時間就會失效(不要故意把時間設的很長,這樣不安全,token變得毫無意義!),用戶需要重新登錄獲取token。用戶經常使用客戶端,使用過程中 由於token到期 客戶端跳轉到登錄界面要求登錄,這樣體驗極差!比如: token有效期2h,用戶一直在使用客戶端,使用過程中token到期跳轉到登錄頁面邀請重新登錄。第一次忍了,過了2個小時又要重新登錄! 用戶:MDZZ,再見。

為了解決上述 token過期了活躍用戶需要在登錄頁面重新登錄 問題,我們需要token刷新 。(注意:‘活躍’ 這個詞).

在介紹雙token刷新怎么實現之前,我們需要了解一個問題: 什么時候需要用戶跳轉登錄頁面重新登錄?
token過期了就需要用戶跳轉登錄頁面重新登錄? 顯然不是的,如果是 不活躍用戶 token過期了,確實需要跳轉登錄頁面重新登錄。 但是 活躍用戶 ,就算token過期了,也不應該跳轉登錄頁面。

細心的話,會發現我在上述過程中 強調了很多次 ‘活躍用戶’ , 那么什么樣的用戶才算活躍用戶?

‘活躍用戶’
在 access_token創建開始時間點 到 2*access_token實效 的 時間內認為用戶是活躍的。

下面是解釋:

access_token有效期時長et
活躍用戶時長at ,即用戶在一次正常操作客戶端后的at時間內都是活躍。 ( at >= et , 因為:用戶access_token在有效期內我們認為用戶是活躍 。)

為什么 at >=et ?

假設 at =et
當用戶登錄后at = et 能滿足: 用戶access_token在有效期et內我們認為用戶是活躍
當用戶在登錄后access_token結束前的某個點操作一次客戶端后, at = et 還是能滿足: 用戶access_token在有效期et內我們認為用戶是活躍 。

如下圖

假設at > et
當用戶登錄后at > et 能滿足: 用戶access_token在有效期et內我們認為用戶是活躍
當用戶在登錄后access_token結束前的某個點操作一次客戶端后, at > et 還是能滿足: 用戶access_token在有效期et內我們認為用戶是活躍。
如下圖:


假設at < et
當用戶登錄后at < et 不能滿足: 用戶access_token在有效期et內我們認為用戶是活躍 。所以不成立
如下圖:

由上3個假設 at=et成立,at>et成立,at<et不成立,得知 at>=et

總結:

若access_token有效期時長et ,活躍用戶時長at ,那么有 at >=et ,且用戶每次正常操作客戶端后用戶活躍時間應刷新(即用戶一次正常操作客戶端后的at時間內都是活躍的), 所以可以認為 [access_token創建開始時間點 ,2*access_token有效時長 ] 時間內用戶是活躍的

雙token的刷新 access_token和refresh_token

第一次用賬號密碼登錄服務器會返回兩個 token : access_token 和 refresh_token,時效長短不一樣。短的access_token 時效過了之后,發送時效長的 refresh_token 重新獲取一個短時效token,如果都過期,就需要重新登錄了。

refresh_token 就是用來刷新access_token 。活躍用戶的 access_token 過期了,用refresh_token 獲取 新的access_token 。

access_token 和 refresh_token 的有效時間如何設置

為了保證能夠刷新活躍用戶的access_token , refresh_token 的有效時間 不能小於 用戶活躍時間點
假設 access_token 有效時間是 et ,那么用戶在 [ access_token 起始時間點 ,2*et ] 時間內用戶是活躍的 ,由此可知 refresh_token 的有效時間 >= 2 * access_token 的有效時間

一般,refresh_token 的有效時間 > 2 * access_token 的有效時間
比如,access_token 實效7天,那么 refresh_token 實效可以給15天,也可以給30天
當然,access_token和refresh_token 的時長具體多少,需要根據環境決定,如涉及到金錢的 銀行客戶端,12306客戶端等 token時長都很短,而普通app客戶端的token可以是幾天甚至上月.

刷新refresh_token

每次 刷新access_token 時判斷 refresh_token 是否快過期 [ refresh_token 剩余有效時間 <= 2*access_token實效],如果是,那就連refresh_token 也刷新。
如果希望降低 刷新refresh_token 頻率,可以將 refresh_token 實效提高
————————————————
版權聲明:本文為CSDN博主「無、涯」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/a704397849/article/details/90216739


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM