欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JWT概述以及Token刷新機(jī)制詳解

 更新時(shí)間:2025年03月25日 10:08:15   作者:透明果凍  
這篇文章主要介紹了JWT概述以及Token刷新機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、概述

什么是JWT,簡(jiǎn)單的說(shuō)就是一個(gè)存儲(chǔ)在請(qǐng)求頭中的字符串,包含了用戶信息和校驗(yàn)信息。較為正式一點(diǎn)的來(lái)說(shuō), JWT(JSON Web Token)是一種無(wú)狀態(tài)的身份認(rèn)證機(jī)制,通常用于前后端分離項(xiàng)目。

它具有以下特點(diǎn):

  • 無(wú)狀態(tài):JWT是基于客戶端存儲(chǔ)的,不會(huì)存儲(chǔ)在服務(wù)端,減輕了服務(wù)端的存儲(chǔ)壓力
  • 高性能:每次請(qǐng)求都會(huì)攜帶JWT,而不用查詢數(shù)據(jù)庫(kù)或緩存,就能完成身份認(rèn)證
  • 對(duì)于跨域友好:由于是通過(guò)HTTP請(qǐng)求進(jìn)行傳輸,不存在跨域限制

二、JWT組成

JWT由三部分組成,各部分用.隔開(kāi)。header.payload.signature。

  • header(頭部):用于存儲(chǔ)JWT類型和加密算法。
  • payload(負(fù)載):存儲(chǔ)數(shù)據(jù),如用戶id,過(guò)期時(shí)間等。
  • signature(簽名):由密鑰(通常是一個(gè)對(duì)稱密鑰或者非對(duì)稱密鑰) 對(duì)前兩部分利用某種特定的加密算法進(jìn)行簽名,防止篡改。

三、JWT認(rèn)證

用戶輸入賬號(hào)密碼,經(jīng)過(guò)服務(wù)端校驗(yàn)成功后,就會(huì)生成一個(gè)JWT,首先選擇其加密算法類型,如 HS256,將這一部分內(nèi)容放入頭部中,然后在負(fù)載中放入用戶id,過(guò)期時(shí)間等信息;然后會(huì)使用一個(gè) 密鑰 對(duì)前兩部分進(jìn)行 HMAC-SHA256 簽名,防止篡改。然后將JWT返回給客戶端,客戶端將其存儲(chǔ)在本地緩存中。

以后的每次請(qǐng)求中,都帶上該JWT。服務(wù)端從請(qǐng)求頭請(qǐng)求頭中獲取該JWT,然后使用相同的密鑰對(duì)其進(jìn)行驗(yàn)證,若驗(yàn)證成功則獲取負(fù)載中的信息,對(duì)其中的信息進(jìn)行驗(yàn)證,一般是查詢db,驗(yàn)證用戶id的有效性。然后才對(duì)該請(qǐng)求進(jìn)行放行。

四、與傳統(tǒng)session相比較

JWT與傳統(tǒng)session的區(qū)別:

  • JWT是存儲(chǔ)在客戶端,服務(wù)端 通過(guò)請(qǐng)求頭獲取,而session通常是存儲(chǔ)在服務(wù)端,一般通過(guò)查詢緩存獲取
  • JWT更適合分布式項(xiàng)目,而session則需要使用共享方案來(lái)實(shí)現(xiàn)
  • JWT容易被篡改,而session由于是存儲(chǔ)在服務(wù)端,更安全
  • 服務(wù)器不能更改JWT的過(guò)期時(shí)間和刪除它,而對(duì)于session來(lái)說(shuō)較為容易

五、對(duì)于token失效的解決策略

我們之前討論的 JWT 認(rèn)證 基本流程是:

  1. 用戶登錄后,服務(wù)器生成一個(gè) Access Token(通常較短有效期,如 15 分鐘),并返回給客戶端。
  2. 客戶端每次請(qǐng)求時(shí)都會(huì)攜帶 Access Token,服務(wù)器通過(guò)驗(yàn)證 Access Token 來(lái)確認(rèn)用戶身份。

但存在一定問(wèn)題:

  • Access Token 一旦過(guò)期,用戶需要重新登錄才能獲取新的 Access Token。
  • 頻繁要求用戶登錄會(huì)影響用戶體驗(yàn),尤其是對(duì)于需要長(zhǎng)時(shí)間使用的app

所以引入 Refresh Token機(jī)制來(lái)解決上述問(wèn)題:

Refresh Token 是一個(gè)長(zhǎng)期有效的 Token,一般有效期7-30天,它的作用是用來(lái)刷新已過(guò)期的 Access Token。

工作流程

用戶登錄

  • 用戶提交用戶名和密碼給服務(wù)器。
  • 服務(wù)器驗(yàn)證成功后,生成 Access Token 和 Refresh Token。
  • Access Token 有較短的有效期(例如 15 分鐘),而 Refresh Token 有較長(zhǎng)的有效期(例如 7 天)。

Access Token 過(guò)期

  • 當(dāng) Access Token 過(guò)期時(shí),客戶端發(fā)送請(qǐng)求到服務(wù)器,攜帶過(guò)期的 Access Token和有效的 Refresh Token,這時(shí)候客戶端不需要讓用戶重新登錄,而是使用Refresh Token來(lái)向服務(wù)器請(qǐng)求刷新一個(gè)新的 Access Token。
  • 服務(wù)器驗(yàn)證 Refresh Token,如果有效,則生成新的 Access Token 和新的 Refresh Token(防止Refresh Token被盜用)返回給客戶端。
  • 客戶端用新的 Access Token 繼續(xù)訪問(wèn) API。

Token 刷新失敗

  • 如果 Refresh Token 也過(guò)期,或者 Refresh Token 被篡改,服務(wù)器會(huì)要求用戶重新登錄。

注意

  • Refresh Token 本身不會(huì)直接用于訪問(wèn) API,僅用于刷新 Access Token。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入淺出MyBatis中映射文件和實(shí)體類的關(guān)聯(lián)性

    深入淺出MyBatis中映射文件和實(shí)體類的關(guān)聯(lián)性

    這篇文章主要介紹了MyBatis中映射文件和實(shí)體類的關(guān)聯(lián)性的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • HashMap 和 Hashtable的區(qū)別

    HashMap 和 Hashtable的區(qū)別

    本文主要介紹HashMap 和 Hashtable的區(qū)別,這里整理了相關(guān)資料并詳細(xì)介紹了HashMap 和 Hashtable的區(qū)別及其工作原理和使用方法,有需要的朋友可以看一下
    2016-09-09
  • java爬取豆瓣電影示例解析

    java爬取豆瓣電影示例解析

    這篇文章主要介紹了java爬取豆瓣電影示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Javaweb中使用Jdom解析xml的方法

    Javaweb中使用Jdom解析xml的方法

    Jdom是一個(gè)開(kāi)源項(xiàng)目,基于樹形結(jié)構(gòu),利用純java的技術(shù)對(duì)XML文檔實(shí)現(xiàn)解析,生成,序列化以及多種操作.這篇文章主要介紹了Javaweb中使用Jdom解析xml的方法的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Java單例模式的知識(shí)點(diǎn)詳解

    Java單例模式的知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家整理的是關(guān)于Java單例模式的知識(shí)點(diǎn)詳解,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • tio-boot?jfinal-plugins框架整合redis示例詳解

    tio-boot?jfinal-plugins框架整合redis示例詳解

    這篇文章主要為大家介紹了tio-boot?jfinal-plugins框架整合redis示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java中的回調(diào)

    Java中的回調(diào)

    這篇文章主要介紹了Java中回調(diào)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)java,感興趣的朋友可以了解下
    2020-08-08
  • 純Java實(shí)現(xiàn)數(shù)字證書生成簽名的簡(jiǎn)單實(shí)例

    純Java實(shí)現(xiàn)數(shù)字證書生成簽名的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇純Java實(shí)現(xiàn)數(shù)字證書生成簽名的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • 兩種實(shí)現(xiàn)Java類隔離加載的方法

    兩種實(shí)現(xiàn)Java類隔離加載的方法

    這篇文章主要介紹了兩種實(shí)現(xiàn)Java類隔離加載的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02
  • SpringBoot的服務(wù)注冊(cè)與發(fā)現(xiàn)示例

    SpringBoot的服務(wù)注冊(cè)與發(fā)現(xiàn)示例

    本篇文章主要介紹了SpringBoot的服務(wù)注冊(cè)與發(fā)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評(píng)論