最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、概述

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

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

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

二、JWT組成

JWT由三部分組成,各部分用.隔開。header.payload.signature。

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

三、JWT認(rèn)證

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

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

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

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

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

五、對于token失效的解決策略

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

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

但存在一定問題:

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

所以引入 Refresh Token機(jī)制來解決上述問題:

Refresh Token 是一個(gè)長期有效的 Token,一般有效期7-30天,它的作用是用來刷新已過期的 Access Token。

工作流程

用戶登錄

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

Access Token 過期

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

Token 刷新失敗

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

注意

  • Refresh Token 本身不會直接用于訪問 API,僅用于刷新 Access Token。

總結(jié)

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

相關(guān)文章

  • 一文解決Java中IP地址訪問HTTPS接口的SSL證書驗(yàn)證問題

    一文解決Java中IP地址訪問HTTPS接口的SSL證書驗(yàn)證問題

    這篇文章主要為大家詳細(xì)介紹了解決Java中IP地址訪問HTTPS接口的SSL證書驗(yàn)證問題的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-12-12
  • MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼

    MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Spring Data JPA結(jié)合Mybatis進(jìn)行分頁查詢的實(shí)現(xiàn)

    Spring Data JPA結(jié)合Mybatis進(jìn)行分頁查詢的實(shí)現(xiàn)

    本文主要介紹了Spring Data JPA結(jié)合Mybatis進(jìn)行分頁查詢的實(shí)現(xiàn)
    2024-03-03
  • Java Fluent Mybatis 聚合查詢與apply方法詳解流程篇

    Java Fluent Mybatis 聚合查詢與apply方法詳解流程篇

    Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis關(guān)于聚合查詢、apply方法詳解
    2021-10-10
  • IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題

    IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題

    這篇文章主要介紹了IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題,本文通過場景描述及問題解析,給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法

    Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java Swing JLabel標(biāo)簽的使用方法

    Java Swing JLabel標(biāo)簽的使用方法

    這篇文章主要介紹了Java Swing JLabel標(biāo)簽的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring Boot 類加載流程分析

    Spring Boot 類加載流程分析

    本文給大家介紹Spring Boot 類加載流程分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-03-03
  • WeakHashMap的垃圾回收原理詳解

    WeakHashMap的垃圾回收原理詳解

    這篇文章主要介紹了WeakHashMap的垃圾回收原理詳解,WeakHashMap 與 HashMap 的用法基本類似,與 HashMap 的區(qū)別在于,HashMap的key保留了對實(shí)際對象的強(qiáng)引用個(gè),這意味著只要該HashMap對象不被銷毀,該HashMap的所有key所引用的對象就不會被垃圾回收,需要的朋友可以參考下
    2023-09-09
  • Java中接口和抽象類的異同以及具體的使用場景

    Java中接口和抽象類的異同以及具體的使用場景

    文章主要介紹了Java中接口(Interface)和抽象類(AbstractClass)的區(qū)別和聯(lián)系,包括相同點(diǎn)和不同點(diǎn),以及它們在實(shí)際開發(fā)中的具體使用場景,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-11-11

最新評論

渑池县| 花垣县| 海丰县| 嫩江县| 元朗区| 湖南省| 黄平县| 汽车| 宁波市| 江北区| 广宁县| 石柱| 台北市| 河西区| 平阳县| 临夏县| 瓦房店市| 黎城县| 沁源县| 尖扎县| 承德市| 土默特左旗| 聂荣县| 江西省| 德安县| 康平县| 赣州市| 工布江达县| 姜堰市| 扎兰屯市| 弥渡县| 甘孜县| 准格尔旗| 商洛市| 大石桥市| 洛扎县| 肇源县| 陆川县| 墨竹工卡县| 大港区| 运城市|