<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          token 過期后,如何自動續(xù)期?

          共 2382字,需瀏覽 5分鐘

           ·

          2022-05-09 23:23

          點擊關注公眾號,回復“2T”獲取2TB學習資源!

          互聯(lián)網架構師后臺回復 2T 有特別禮包

          上一篇:設計一個高質量的 API 接口

          來源:toutiao.com/article/6995179162675790350


          JWT token的 payload 部分是一個json串,是要傳遞數(shù)據(jù)的一組聲明,這些聲明被JWT標準稱為claims。


          JWT標準里面定義的標準claim包括:


          • iss(Issuser):JWT的簽發(fā)主體;
          • sub(Subject):JWT的所有者;
          • aud(Audience):JWT的接收對象;
          • exp(Expiration time):JWT的過期時間;
          • nbf(Not Before):JWT的生效開始時間;
          • iat(Issued at):JWT的簽發(fā)時間;
          • jti(JWT ID):是JWT的唯一標識。


          除了以上標準聲明以外,我們還可以自定義聲明。以 com.auth0 為例,下面代碼片段實現(xiàn)了生成一個帶有過期時間的token.

          String token = JWT.create()    .withIssuer(ISSUER)    .withIssuedAt(new Date(currentTime))// 簽發(fā)時間    .withExpiresAt(new Date(currentTime + EXPIRES_IN * 1000 * 60))// 過期時間戳    .withClaim("username", username)//自定義參數(shù)    .sign(Algorithm.HMAC256(user.getPassword()));

          其中:


          • withIssuer() 設置簽發(fā)主體;
          • withIssuedAt() 設置簽發(fā)時間;
          • withExpiresAt() 設置過期時間戳,過期的時長為 EXPIRES_IN (單位秒);
          • withClaim() 設置自定義參數(shù)。


          JWT設置了過期時間以后,一定超過,那么接口就不能訪問了,需要用戶重新登錄獲取token。如果經常需要用戶重新登錄,顯然這種體驗不是太好,因此很多應用會采用token過期后自動續(xù)期的方案,只有特定條件下才會讓用戶重新登錄。


          token過期的續(xù)期方案


          解決token過期的續(xù)期問題可以有很多種不同的方案,這里舉一些比較有代表性的例子。首先我們看一個單token方案,這個方案除了可以實現(xiàn)token續(xù)期以外,還可以實現(xiàn)某些條件下的強制重新登錄。


          單token方案


          • 將 token 過期時間設置為15分鐘;

          • 前端發(fā)起請求,后端驗證 token 是否過期;如果過期,前端發(fā)起刷新token請求,后端為前端返回一個新的token;

          • 前端用新的token發(fā)起請求,請求成功;

          • 如果要實現(xiàn)每隔72小時,必須重新登錄,后端需要記錄每次用戶的登錄時間;用戶每次請求時,檢查用戶最后一次登錄日期,如超過72小時,則拒絕刷新token的請求,請求失敗,跳轉到登錄頁面。


          另外后端還可以記錄刷新token的次數(shù),比如最多刷新50次,如果達到50次,則不再允許刷新,需要用戶重新授權。


          上面介紹的單token方案原理比較簡單。下面我們再看一個雙token方案。

          雙token方案



          微信網頁授權是通過OAuth2.0機制實現(xiàn)的,也使用了雙token方案。


          微信網頁授權方案



          后端實現(xiàn)token過期還可以利用Redis來存儲token,設置redis的鍵值對的過期時間。如果發(fā)現(xiàn)redis中不存在token的記錄,說明token已經過期了。

          -End-

          最后,關注公眾號互聯(lián)網架構師,在后臺回復:2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全。


          正文結束


          推薦閱讀 ↓↓↓

          1.心態(tài)崩了!稅前2萬4,到手1萬4,年終獎扣稅方式1月1日起施行~

          2.深圳一普通中學老師工資單曝光,秒殺程序員,網友:敢問是哪個學校畢業(yè)的?

          3.從零開始搭建創(chuàng)業(yè)公司后臺技術棧

          4.程序員一般可以從什么平臺接私活?

          5.清華大學:2021 元宇宙研究報告!

          6.為什么國內 996 干不過國外的 955呢?

          7.這封“領導痛批95后下屬”的郵件,句句扎心!

          8.15張圖看懂瞎忙和高效的區(qū)別!

          瀏覽 22
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品久久久久久久久久久免费 | 亚洲无码中出乱伦内射 | 国产宴妇精品久久久久久 | 亚洲一级二级三级 | 一二三精品区 |