偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

不會(huì)吧!你還沒搞懂JWT的執(zhí)行流程?

開發(fā) 前端
JWT 執(zhí)行流程:用戶登錄后生成加密令牌、客戶端存儲(chǔ)并在請(qǐng)求頭攜帶、服務(wù)端驗(yàn)證簽名和過期時(shí)間后授權(quán)。它的優(yōu)點(diǎn)包括無狀態(tài)、跨域支持、自包含性,適用于分布式系統(tǒng)和微服務(wù)架構(gòu),通過簽名確保數(shù)據(jù)安全。

JWT 在目前的項(xiàng)目開發(fā)中使用到的頻率是非常高的,因此它也是面試常問的一類問題,所以今天我們就來看看“項(xiàng)目中 JWT 的執(zhí)行流程?”這個(gè)問題。

1.什么是 JWT?

JWT(JSON Web Token) 是一種開放標(biāo)準(zhǔn)(RFC 7519),用于在網(wǎng)絡(luò)應(yīng)用間安全傳輸信息,通常用于身份驗(yàn)證和信息交換。其核心特點(diǎn)是通過緊湊且自包含的 JSON 對(duì)象傳遞數(shù)據(jù),無需服務(wù)端存儲(chǔ)會(huì)話狀態(tài)。

2.JWT組成

JWT 是由三部分組成的:

圖片

  • Header(頭部):通常由以下兩部分組成:
  • Token 類型:通常是 JWT。
  • 加密算法:例如 HS256(HMAC SHA-256)、RS256(RSA SHA-256)等。
  • Payload(載荷) :JWT 的主體部分,通常為以下三類:
  • 標(biāo)準(zhǔn)聲明(Registered Claims):預(yù)定義的字段,如 iss(發(fā)行者)、exp (過期時(shí)間)、sub(主題)等。
  • 公共聲明(Public Claims):用戶自定義的字段,例如用戶 ID、用戶名、角色等。
  • 私有聲明(Private Claims):在特定場(chǎng)景下使用的字段,通常用于內(nèi)部系統(tǒng)。
  • Signature(簽名):用于驗(yàn)證 Token 的完整性和防止篡改。

它們之間用點(diǎn)“.”分隔,形成一個(gè)字符串(Token)。

3.執(zhí)行流程

JWT 執(zhí)行流程如下:

圖片

在 Spring Boot 項(xiàng)目中,JWT 的執(zhí)行流程主要分為以下步驟:

1. 用戶登錄與令牌生成

  • 用戶通過用戶名和密碼發(fā)起登錄請(qǐng)求。
  • 服務(wù)端驗(yàn)證用戶憑證,若驗(yàn)證成功,則使用 JWT 工具類生成令牌:
  • Header:指定算法(如 HS256)和令牌類型(JWT)。
  • Payload:包含用戶信息(如用戶 ID、角色)和聲明(如過期時(shí)間 exp)。
  • Signature:使用密鑰對(duì) Header 和 Payload 進(jìn)行簽名,確保令牌不可篡改。

2. 客戶端存儲(chǔ)令牌

  • 服務(wù)端將生成的 JWT 返回給客戶端(通常通過響應(yīng)體或 Header)。
  • 客戶端(如瀏覽器或移動(dòng)端)將令牌存儲(chǔ)在本地(如 LocalStorage 或 Cookie)。

3. 請(qǐng)求攜帶令牌

  • 客戶端在后續(xù)請(qǐng)求的 Authorization Header 中以 Bearer格式攜帶 JWT。

4. 服務(wù)端驗(yàn)證令牌

  • 攔截器/過濾器:Spring Boot 通過自定義攔截器或 Spring Security 過濾器鏈攔截請(qǐng)求,提取并驗(yàn)證 JWT:
  • 簽名驗(yàn)證:使用密鑰校驗(yàn)簽名是否有效。
  • 過期檢查:檢查 exp 字段是否過期。
  • 用戶信息提取:解析 Payload 中的用戶信息(如用戶 ID),用于后續(xù)權(quán)限控制。

5. 授權(quán)與響應(yīng)

  • 若驗(yàn)證通過,服務(wù)端處理請(qǐng)求并返回?cái)?shù)據(jù)。
  • 若驗(yàn)證失敗(如令牌過期或簽名錯(cuò)誤),返回 401 狀態(tài)碼或自定義錯(cuò)誤信息。

4.JWT核心實(shí)現(xiàn)代碼

// 生成 JWT(示例)|SECRET_KEY 為服務(wù)保存的密鑰。
public String generateToken(UserDetails user) {
return Jwts.builder()
.setSubject(user.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}

// 驗(yàn)證 JWT(示例)
public boolean validateToken(String token) {
    try {
        Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
        return true;
    } catch (Exception e) {
        return false;
    }
}

注意事項(xiàng)

  • 密鑰安全:簽名密鑰需妥善保管,并定期修改,避免泄露。
  • 無狀態(tài)性:JWT 無需服務(wù)端存儲(chǔ)會(huì)話信息,適合分布式系統(tǒng)。

5.JWT 優(yōu)點(diǎn)分析

JWT 相較于傳統(tǒng)的基于會(huì)話(Session)的認(rèn)證機(jī)制,具有以下優(yōu)勢(shì):

  1. 無需服務(wù)器存儲(chǔ)狀態(tài):傳統(tǒng)的基于會(huì)話的認(rèn)證機(jī)制需要服務(wù)器在會(huì)話中存儲(chǔ)用戶的狀態(tài)信息,包括用戶的登錄狀態(tài)、權(quán)限等。而使用 JWT,服務(wù)器無需存儲(chǔ)任何會(huì)話狀態(tài)信息,所有的認(rèn)證和授權(quán)信息都包含在 JWT 中,使得系統(tǒng)可以更容易地進(jìn)行水平擴(kuò)展。
  2. 跨域支持:由于 JWT 包含了完整的認(rèn)證和授權(quán)信息,因此可以輕松地在多個(gè)域之間進(jìn)行傳遞和使用,實(shí)現(xiàn)跨域授權(quán)。
  3. 適應(yīng)微服務(wù)架構(gòu):在微服務(wù)架構(gòu)中,很多服務(wù)是獨(dú)立部署并且可以橫向擴(kuò)展的,這就需要保證認(rèn)證和授權(quán)的無狀態(tài)性。使用 JWT 可以滿足這種需求,每次請(qǐng)求攜帶 JWT 即可實(shí)現(xiàn)認(rèn)證和授權(quán)。
  4. 自包含:JWT 包含了認(rèn)證和授權(quán)信息,以及其他自定義的聲明,這些信息都被編碼在 JWT 中,在服務(wù)端解碼后使用。JWT 的自包含性減少了對(duì)服務(wù)端資源的依賴,并提供了統(tǒng)一的安全機(jī)制。
  5. 擴(kuò)展性:JWT 可以被擴(kuò)展和定制,可以按照需求添加自定義的聲明和數(shù)據(jù),靈活性更高。

小結(jié)

JWT 執(zhí)行流程:用戶登錄后生成加密令牌、客戶端存儲(chǔ)并在請(qǐng)求頭攜帶、服務(wù)端驗(yàn)證簽名和過期時(shí)間后授權(quán)。它的優(yōu)點(diǎn)包括無狀態(tài)、跨域支持、自包含性,適用于分布式系統(tǒng)和微服務(wù)架構(gòu),通過簽名確保數(shù)據(jù)安全。

課后思考:JWT 過期后會(huì)怎樣?如何實(shí)現(xiàn)自動(dòng)續(xù)期?

責(zé)任編輯:武曉燕 來源: 磊哥和Java
相關(guān)推薦

2021-08-04 08:31:10

MySQL數(shù)據(jù)庫日志

2021-09-07 11:20:02

binlogMySQL數(shù)據(jù)庫

2022-10-28 09:51:18

PrintfLinux開發(fā)

2020-08-05 14:28:32

編程程序員代碼

2022-01-25 12:41:31

ChromeResponse接口

2021-12-06 17:44:56

MHAMySQL高可用

2020-07-30 17:00:03

人工智能AI

2015-12-31 13:38:59

創(chuàng)新大公司

2020-09-14 06:52:42

Java對(duì)象代碼

2019-09-21 21:32:34

數(shù)據(jù)庫SQL分布式

2023-04-06 08:24:25

Java8管理LocalDate

2020-06-30 07:48:27

SpringMVC

2021-01-21 05:52:11

斷言assert程序員

2025-05-27 08:50:00

2021-08-09 08:53:30

HTTP狀態(tài)化協(xié)議

2023-11-02 08:25:25

組件ReactUI

2025-04-17 02:30:00

2019-12-19 09:08:42

HTTP瀏覽器緩存

2017-07-26 10:08:06

FABDesign SuppAndroid

2022-08-01 08:36:09

upstream下游上游
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)