JWT token過期自動續期解決方案

2022-07-20 16:33:10 字數 1098 閱讀 5826

jwt

jwt全稱json web token,由三部分組成header(頭部,用於描述關於該jwt的最基本的資訊,例如其型別以及簽名所用的演算法等)、payload(載荷,就是存放有效資訊的地方,在這一部分中存放過期時間)和signature(簽證,簽證資訊)。

token

token就是後端生成的jwt字串值,在前後端分離中,token是前端訪問後端介面的合法身份、許可權的憑證。

token過期重新整理方案

1、單點登入

使用者登入,後端驗證使用者成功之後生成兩個token,這兩個token分別是access_token(訪問介面使用的token)、refresh_token(access_token過期後用於刷續期的token,注意設定refresh_token的過期時間需比access_token的過期時間長),後端將使用者資訊和這兩個token存放到redis中並返回給前端。

前端在獲取到登入成功返回的兩個token之後,將之存放到localstorage本地儲存中。

2、介面請求

前端封裝統一介面請求函式、token重新整理函式,在請求成功之後對返回結果進行校驗,如果token過期,則呼叫token重新整理函式請求新的token.

後端在接收到token重新整理請求之後通過結合redis中存放的使用者資訊、token和refresh_token對請求引數進行驗證,驗證通過之後生成新的token和refresh_token存放到redis中並返回給前端。至此完成token重新整理。

3、多請求應對

所謂多請求,就是指在短時間內同時發生多個請求,如果此時token已經過期,那麼這些請求都會出現token過期請求失敗的情況。

為了避免反覆重新整理token,需要設定乙個重新整理token的開關isrefresh,當乙個請求出現token過期的時候,這個時候會呼叫token重新整理函式,與此同時關閉開關將isrefresh的值設定為false,避免後續請求去呼叫token重新整理函式。

當發現token過期時,咱們將請求延緩到token重新整理之後再重新執行請求,這裡採用promise函式,把每乙個token失效的請求都存到乙個promise函式集合裡面,當token重新整理之後開啟開關將isrefresh的值設定為true,然後批量執行promise函式集合裡面的promise函式,返回請求結果。 

jwt token自動重新整理的問題

在restframework使用jwt時,遇到了兩個引數jwt expiration delta和jwt refresh expiration delta jwt expiration delta datetime.timedelta minutes 30 jwt allow refresh tru...

redis續期 redis分布式鎖自動延長過期時間

背景 專案組已經有個 分布式鎖註解 參考前文 記一次分布式鎖註解化 但是在設定鎖過期時間時,需要去預估業務耗時時間,如果鎖的過期時間能根據業務執行時間自動調整,那使用的就更方便了。思路保留原先的可自定義設定過期時間,只有在沒有設定過期時間 過期時間為預設值0 的情況下,才會啟動自動延長。申請鎖時,設...

mongodb設定自動過期

在業務場景中,可能會碰到這種情況 比如只需要儲存最近一段時間的記錄,超過這個時限的資料就是無效的,可以進行刪除操作,否則資料會越來越多。最容易想到的乙個辦法,是定時設定乙個指令碼去跑,將超過時間的資料刪除。對於mongodb,本身自帶了這個功能,能夠設定過期的資料自動刪除。怎麼建立呢,其實是在建立索...