日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

一文讀懂JWT

來源: 責(zé)編: 時間:2023-12-23 13:47:09 273觀看
導(dǎo)讀Labs 導(dǎo)讀我們在做應(yīng)用系統(tǒng)時避免不了用戶的認證授權(quán),說簡單點就是:認證你是誰,授權(quán)你有什么權(quán)限。在這里先來談?wù)動脩舻恼J證,目前常用的認證方式有兩種:基于session認證、基于token認證。Part 01、 JWT是什么? JWT(JSON W

qxL28資訊網(wǎng)——每日最新資訊28at.com

Labs 導(dǎo)讀

我們在做應(yīng)用系統(tǒng)時避免不了用戶的認證授權(quán),說簡單點就是:認證你是誰,授權(quán)你有什么權(quán)限。在這里先來談?wù)動脩舻恼J證,目前常用的認證方式有兩種:基于session認證、基于token認證。qxL28資訊網(wǎng)——每日最新資訊28at.com

Part 01、  JWT是什么?  

JWT(JSON Web Token)是一個開放的行業(yè)標準(RFC 7519),自身包含了身份驗證所需要的所有信息,因此我們的服務(wù)器不需要存儲用戶Session信息。這顯然增加了系統(tǒng)的可用性和伸縮性,大大減輕了服務(wù)端的壓力。可以看出JWT更符合設(shè)計RESTful API時的Stateless(無狀態(tài))原則。并且使用JWT認證可以有效避免CSRF攻擊,因為JWT一般是存在在localStorage中,使用JWT進行身份驗證的過程中是不會涉及到Cookie的。qxL28資訊網(wǎng)——每日最新資訊28at.com

Part 02、  JWT由哪些部分組成? 

圖片圖片qxL28資訊網(wǎng)——每日最新資訊28at.com

JWT本質(zhì)上是一組字串,通常是這樣的:xxxxx.yyyyy.zzzzz,通過(.)切分成三個為Base64編碼的部分:qxL28資訊網(wǎng)——每日最新資訊28at.com

  • Header:描述JWT的元數(shù)據(jù),定義了生成簽名的算法以及Token的類型。
  • Payload:用來存放實際需要傳遞的數(shù)據(jù)。
  • Signature:服務(wù)器通過Payload、Header和一個密鑰(Secret)

使用Header里面指定的簽名算法(默認是 HMAC SHA256)生成。qxL28資訊網(wǎng)——每日最新資訊28at.com

示例:qxL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qxL28資訊網(wǎng)——每日最新資訊28at.com

可以通過https://jwt.io對上述JWT進行解碼,解碼之后便可得到Header、Payload、Signature這三部分。Header和Payload都是JSON格式的數(shù)據(jù),Signature由Payload、Header和Secret(密鑰)通過特定的計算公式和加密算法得到。qxL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qxL28資訊網(wǎng)——每日最新資訊28at.com

  • Header

通常由兩部分組成。qxL28資訊網(wǎng)——每日最新資訊28at.com

  • typ(Type):令牌類型,也就是JWT
  • alg(Algorithm):簽名算法,比如HS256

示例:qxL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qxL28資訊網(wǎng)——每日最新資訊28at.com

JSON形式的Header被轉(zhuǎn)換成Base64編碼,成為JWT的第一部。qxL28資訊網(wǎng)——每日最新資訊28at.com

  • Payload

包含了三種類型的聲明。qxL28資訊網(wǎng)——每日最新資訊28at.com

  • Registered Claims(注冊聲明):預(yù)定義的一些聲明,建議使用,但不強制。
  • Public Claims(公有聲明):JWT簽發(fā)方可以自定義的聲明。
  • Private Claims(私有聲明):JWT簽發(fā)方因為項目需要而自定義的聲明。

下面是一些常見的注冊聲明:qxL28資訊網(wǎng)——每日最新資訊28at.com

  • iss(issuer):JWT 簽發(fā)方。
  • iat(issued at time):JWT簽發(fā)時間。
  • sub(subject):JWT主題。
  • aud(audience):JWT接收方。
  • exp(expiration time):JWT的過期時間。
  • nbf(not before time):JWT生效時間,早于該定義的時間的JWT不能被接受處理。
  • jti(JWT ID):JWT唯一標識。

示例:qxL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qxL28資訊網(wǎng)——每日最新資訊28at.com

Payload部分默認是不加密的,一定不要將隱私信息存放在 Payload 當(dāng)中?。。?/span>qxL28資訊網(wǎng)——每日最新資訊28at.com

JSON 形式的Payload被轉(zhuǎn)換成Base64編碼,成為JWT的第二部分。qxL28資訊網(wǎng)——每日最新資訊28at.com

  • Signature

對前兩部分的簽名,作用是防止JWT(主要是payload)被篡改。簽名的生成需要用到:Header+Payload、存放在服務(wù)端的密鑰(一定不要泄露出去)、簽名算法。簽名的計算公式如下:qxL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qxL28資訊網(wǎng)——每日最新資訊28at.com

算出簽名以后,把 Header、Payload、Signature三個部分拼成一個字符串,每個部分之間用"點"(.)分隔,這個字符串就是JWT。qxL28資訊網(wǎng)——每日最新資訊28at.com

Part 03、 JWT如何進行用戶認證?

在基于JWT進行身份驗證的的應(yīng)用程序中,服務(wù)器通過 Payload、Header和Secret(密鑰)創(chuàng)建JWT并將JWT發(fā)送給客戶端??蛻舳私邮盏絁WT之后,會將其保存在Cookie或者localStorage里面,以后客戶端發(fā)出的所有請求都會攜帶這個令牌。qxL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片qxL28資訊網(wǎng)——每日最新資訊28at.com

簡化后的步驟如下:qxL28資訊網(wǎng)——每日最新資訊28at.com

1.用戶向服務(wù)器發(fā)送用戶名、密碼以及驗證碼用于登陸系統(tǒng)。qxL28資訊網(wǎng)——每日最新資訊28at.com

2.如果用戶用戶名、密碼以及驗證碼校驗正確的話,服務(wù)端會返回已簽名的Token,也就是JWT。qxL28資訊網(wǎng)——每日最新資訊28at.com

3.用戶以后每次向后端發(fā)請求都在Header中帶上這個JWT。qxL28資訊網(wǎng)——每日最新資訊28at.com

4.服務(wù)端檢查JWT并從中獲取用戶相關(guān)信息。qxL28資訊網(wǎng)——每日最新資訊28at.com

兩點建議:qxL28資訊網(wǎng)——每日最新資訊28at.com

1.建議將JWT存放在localStorage中,放在Cookie中會有CSRF風(fēng)險。qxL28資訊網(wǎng)——每日最新資訊28at.com

2.請求服務(wù)端并攜帶JWT的常見做法是將其放在HTTP Header的Authorization字段中(Authorization:Bearer Token)qxL28資訊網(wǎng)——每日最新資訊28at.com

Part 04、 JWT如何防止被篡改? 

服務(wù)器返回簽名之后,即使JWT被泄露或者截獲,黑客也沒辦法同時篡改Signature、Header、Payload。qxL28資訊網(wǎng)——每日最新資訊28at.com

這是為什么呢?因為服務(wù)端拿到JWT之后,會解析出其中包含的Header、Payload 以及Signature。服務(wù)端會根據(jù)Header、Payload、密鑰再次生成一個Signature。拿新生成的Signature和JWT中的Signature作對比,如果一樣就說明Header和Payload沒有被修改。qxL28資訊網(wǎng)——每日最新資訊28at.com

不過,如果服務(wù)端的秘鑰也被泄露的話,黑客就可以同時篡改Signature、Header、Payload了。黑客直接修改了Header和Payload之后,再重新生成一個Signature就可以了。qxL28資訊網(wǎng)——每日最新資訊28at.com

?注意:密鑰一定保管好,一定不要泄露出去。JWT安全的核心在于簽名,簽名安全的核心在密鑰。qxL28資訊網(wǎng)——每日最新資訊28at.com

Part 05、  JWT如何加強安全性?  

1.使用安全系數(shù)高的加密算法。qxL28資訊網(wǎng)——每日最新資訊28at.com

2.使用成熟的開源庫,沒必要造輪子。qxL28資訊網(wǎng)——每日最新資訊28at.com

3.JWT存放在localStorage中而不是Cookie中,避免CSRF風(fēng)險。qxL28資訊網(wǎng)——每日最新資訊28at.com

4.一定不要將隱私信息存放在Payload當(dāng)中。qxL28資訊網(wǎng)——每日最新資訊28at.com

5.密鑰一定保管好,一定不要泄露出去。JWT安全的核心在于簽名,簽名安全的核心在密鑰。qxL28資訊網(wǎng)——每日最新資訊28at.com

6.Payload要加入exp(JWT的過期時間),永久有效的JWT不合理。并且JWT的過期時間不易過長。qxL28資訊網(wǎng)——每日最新資訊28at.com

Part 06、  JWT有哪些優(yōu)缺點?  

- 優(yōu)點qxL28資訊網(wǎng)——每日最新資訊28at.com

1.無狀態(tài):自身攜帶用戶信息,不需要在服務(wù)器上保存session信息。qxL28資訊網(wǎng)——每日最新資訊28at.com

2.可有效避免CSRF攻擊:CSRF攻擊需要依賴Cookie,然而JWT選擇存放在localStorage中,因此非法鏈接無法獲取JWT。 qxL28資訊網(wǎng)——每日最新資訊28at.com

- 缺點qxL28資訊網(wǎng)——每日最新資訊28at.com

1.不可控:就比如說,我們想要在JWT有效期內(nèi)廢棄一個JWT或者更改它的權(quán)限的話,并不會立即生效,通常需要等到有效期過后才可以。再比如說,當(dāng)用戶Logout的話,JWT也還有效。qxL28資訊網(wǎng)——每日最新資訊28at.com

Part 07、  JWT使用總結(jié) 

在“約定優(yōu)于配置,配置優(yōu)于編碼”的開發(fā)理念下,通過Apollo配置中心,程序員不需要每次更改線上配置都要重新發(fā)布服務(wù),成功實現(xiàn)了將配置與編碼解耦,為線上服務(wù)變更配置提供了解決方案。qxL28資訊網(wǎng)——每日最新資訊28at.com


qxL28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-52590-0.html一文讀懂JWT

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 微服務(wù)開發(fā),這十個點你要知道

下一篇: 15個跨平臺的VS Code插件

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 云浮市| 东乌| 将乐县| 北川| 无为县| 桦南县| 锦州市| 玉门市| 大渡口区| 资阳市| 普陀区| 黄平县| 河曲县| 邹城市| 长葛市| 始兴县| 密云县| 磐安县| 溆浦县| 崇仁县| 通山县| 治县。| 涟水县| 寻乌县| 安达市| 客服| 丰宁| 德庆县| 五常市| 盐源县| 夏邑县| 乌恰县| 佛山市| 新源县| 新野县| 宾阳县| 吴桥县| 崇州市| 德令哈市| 增城市| 宜君县|