自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

華為一面:談?wù)勀銓?duì)JWT的理解?

開(kāi)發(fā) 前端
JWT 提供了一種有效的方法來(lái)處理用戶身份驗(yàn)證和信息交換的問(wèn)題,也是目前主流的用戶登錄驗(yàn)證機(jī)制,但同時(shí)也需要注意上述提到的一些潛在風(fēng)險(xiǎn)和限制,它更適用于分布式大型項(xiàng)目的用戶信息傳輸和登錄權(quán)限判斷。

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

1.為什么需要JWT?

開(kāi)發(fā)中需要 JWT 的主要原因是為了解決傳統(tǒng)基于 Session 的身份驗(yàn)證方法中存在的問(wèn)題,比如跨域認(rèn)證不便、擴(kuò)展性差等問(wèn)題。而 JWT 允許我們?cè)O(shè)計(jì)無(wú)狀態(tài)的、分布式的 Web 應(yīng)用,通過(guò)在每個(gè)請(qǐng)求中傳遞 Token 來(lái)驗(yàn)證用戶身份,從而實(shí)現(xiàn)更加靈活和可擴(kuò)展的架構(gòu)。

2.執(zhí)行流程

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

它的主要執(zhí)行流程如下:

  • 用戶登錄成功后,服務(wù)器根據(jù)用戶信息生成一個(gè) JWT 的 Token 令牌。
  • 服務(wù)器將此 Token 返回給客戶端,客戶端通常存儲(chǔ)在 Cookie 或 LocalStorage 中。
  • 之后客戶端在訪問(wèn)服務(wù)器端時(shí)會(huì)攜帶這個(gè) Token,一般放在 HTTP 頭中。
  • 服務(wù)器接收到請(qǐng)求后,解析 JWT,驗(yàn)證其簽名有效性以及是否過(guò)期。
  • 如果驗(yàn)證成功,則處理相應(yīng)的請(qǐng)求;否則,返回錯(cuò)誤信息(重新登錄)。

3.JWT組成

JWT 是由三部分組成的:

  • Header(頭部):通常由以下兩部分組成:

a.Token 類(lèi)型:通常是 JWT。

b.加密算法:例如 HS256(HMAC SHA-256)、RS256(RSA SHA-256)等。

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

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

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

在 Spring Boot 項(xiàng)目中,首先要引入 JWT 工具依賴,之后通過(guò)以下核心代碼可以生成 Token,以及驗(yàn)證 Token:

// 生成 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)

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

5.JWT VS Session

JWT 和 Session 主要區(qū)別如下:

  • 存儲(chǔ)位置不同:Session 通常將用戶會(huì)話信息存儲(chǔ)在服務(wù)器端,而 JWT 則將信息存儲(chǔ)在客戶端。
  • 狀態(tài)管理不同:Session 是基于服務(wù)端的狀態(tài)機(jī)制,需要服務(wù)器保存會(huì)話狀態(tài);JWT 是無(wú)狀態(tài)的,所有的信息都包含在 Token 中,服務(wù)端無(wú)需保存任何狀態(tài)。
  • 隱私性不同:由于 JWT 的信息直接暴露給用戶,因此敏感信息不應(yīng)該存儲(chǔ)在 JWT 中。Session 因?yàn)橹辉诜?wù)端維護(hù),隱私性相對(duì)更好一些。
  • 擴(kuò)展性和性能不同:JWT 非常適合分布式系統(tǒng),因?yàn)樗灰蕾囉诜?wù)端的狀態(tài)。對(duì)于大型分布式系統(tǒng),JWT 可以顯著減少服務(wù)器資源的消耗,提高系統(tǒng)的響應(yīng)速度。

6.JWT存在的問(wèn)題

盡管 JWT 有很多優(yōu)點(diǎn),但也存在一些挑戰(zhàn):

  • 大小限制:由于 JWT 是以 HTTP 頭部的形式發(fā)送的,所以它的大小受到限制。如果 JWT 中包含過(guò)多的數(shù)據(jù),可能會(huì)導(dǎo)致請(qǐng)求頭過(guò)長(zhǎng)的問(wèn)題。解決辦法是盡量保持 JWT 簡(jiǎn)潔,僅包含必要的信息。
  • 令牌撤銷(xiāo)問(wèn)題:一旦 JWT 被簽發(fā),除非過(guò)期,否則無(wú)法輕易撤銷(xiāo)。
  • 安全性考慮:雖然 JWT 本身支持簽名和加密,但如果密鑰泄露,將會(huì)導(dǎo)致嚴(yán)重的安全隱患。因此,確保密鑰的安全管理和定期更新是非常重要的。

小結(jié)

JWT 提供了一種有效的方法來(lái)處理用戶身份驗(yàn)證和信息交換的問(wèn)題,也是目前主流的用戶登錄驗(yàn)證機(jī)制,但同時(shí)也需要注意上述提到的一些潛在風(fēng)險(xiǎn)和限制,它更適用于分布式大型項(xiàng)目的用戶信息傳輸和登錄權(quán)限判斷。

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

2022-06-30 09:10:33

NoSQLHBaseRedis

2023-11-28 12:25:02

多線程安全

2022-09-19 07:57:59

云服務(wù)互聯(lián)網(wǎng)基礎(chǔ)設(shè)施

2024-09-20 05:46:00

2024-09-11 16:49:55

2022-08-14 07:14:50

Kafka零拷貝

2022-10-09 15:18:31

SwaggerOpenAPI工具

2022-09-09 10:15:06

OAuthJava

2025-03-21 00:00:05

Reactor設(shè)計(jì)模式I/O 機(jī)制

2024-10-24 16:14:43

數(shù)據(jù)傳輸CPU零拷貝

2022-03-21 09:05:18

volatileCPUJava

2022-08-26 00:21:44

IO模型線程

2022-09-06 11:13:16

接口PipelineHandler

2024-12-06 14:34:00

Spring過(guò)濾器

2025-02-21 15:25:54

虛擬線程輕量級(jí)

2024-09-27 15:43:52

零拷貝DMAIO

2022-09-23 11:00:27

KafkaZookeeper機(jī)制

2022-06-10 11:51:49

MySQL事務(wù)隔離

2022-07-26 07:51:40

ThreadRunnableFuture

2024-08-27 12:36:33

點(diǎn)贊
收藏

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