日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSON WEB TOKEN(JWT)的分析

發(fā)布時(shí)間:2025/7/14 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSON WEB TOKEN(JWT)的分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JSON WEB TOKEN(JWT)的分析

一般情況下,客戶的會(huì)話數(shù)據(jù)會(huì)存在文件中,或者引入redis來存儲(chǔ),實(shí)現(xiàn)session的管理,但是這樣操作會(huì)存在一些問題,使用文件來存儲(chǔ)的時(shí)候,在多臺(tái)機(jī)器上,比較難實(shí)現(xiàn)共享,使用redis來存儲(chǔ)的時(shí)候,則需要引入多一個(gè)集群,這樣會(huì)增加管理的工作量,也不方便。有一個(gè)直觀的辦法,就是將session數(shù)據(jù),存儲(chǔ)在客戶端中,使用簽名校驗(yàn)數(shù)據(jù)是否有篡改,客戶請求的時(shí)候,把session數(shù)據(jù)帶上,獲取里面的數(shù)據(jù),通過校驗(yàn),然后進(jìn)行身份認(rèn)證。

數(shù)據(jù)存儲(chǔ)在客戶端中,會(huì)存在一些挑戰(zhàn):

  • 數(shù)據(jù)安全問題
  • 數(shù)據(jù)量不能太大
  • 續(xù)簽的問題
  • 注銷的問題

為了實(shí)現(xiàn)客戶端存儲(chǔ)會(huì)話數(shù)據(jù)的解決方案,制定了JSON Web Token的協(xié)議,詳細(xì)的協(xié)議可以在:RFC7529查看。下面我們看看jwt協(xié)議是怎樣解決上面的挑戰(zhàn)的。

JWT的結(jié)構(gòu):

JWT加密后,使用的格式,分為三部分,header,payload和signature,使用.號(hào)連接起來:

Header.Payload.Signature

JWT的header:

JWT的header,定義了存儲(chǔ)的算法和協(xié)議名稱:

{"alg": "HS256","typ": "JWT" }

JWT的Payload:

下面這些負(fù)載字段,是JWT協(xié)議提供選用,一般情況下,payload的數(shù)據(jù)是不加密存儲(chǔ)在客戶端中的,所以要注意不要存儲(chǔ)敏感信息:

iss (issuer):簽發(fā)人 exp (expiration time):過期時(shí)間 sub (subject):主題 aud (audience):受眾 nbf (Not Before):生效時(shí)間 iat (Issued At):簽發(fā)時(shí)間 jti (JWT ID):編號(hào)

payload除了這些字段,還可以擴(kuò)展一些數(shù)據(jù),更加符合我們的需求:

{"iss": "foo","extend_data": "hell" }

JWT的Signature

服務(wù)端,有一個(gè)秘鑰,通過秘鑰對(duì)header和payload進(jìn)行簽名,使用header中指定的簽名算法類型,一般有HMAC,RSA和ECDSA,下面是簽名的格式:

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

JWT的通訊方式

JWT一般會(huì)將token數(shù)據(jù)存儲(chǔ)在http請求的header中,通過Bearer來分隔:

headers: {'Authorization': 'Bearer ' + token }

定義好數(shù)據(jù)結(jié)構(gòu)和通訊方式,下面看看如何處理一些問題:

續(xù)簽問題

每一個(gè)token產(chǎn)生,都應(yīng)該限制好過期時(shí)間,確保只能在一段時(shí)間內(nèi)有效,保證安全。當(dāng)達(dá)到過期時(shí)間時(shí),需要對(duì)token進(jìn)行續(xù)簽,可以定時(shí)想服務(wù)器提交請求,重新獲取token來實(shí)現(xiàn)。

注銷問題

當(dāng)客戶登錄的時(shí)候,需要注銷登錄會(huì)話,由于token是沒有狀態(tài)的,只能在客戶端把token刪除,偽造一個(gè)注銷的狀態(tài),真正的注銷只能等待token過期。

也可以有種辦法,就是把token的信息記錄在redis中,當(dāng)客戶退出時(shí),講redis中的token刪除,而一般請求時(shí),會(huì)通過redis對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),這樣可以實(shí)現(xiàn)真的注銷效果,但要引入多一個(gè)組件,把token變?yōu)橛袪顟B(tài),如果用這種辦法,也就不符合token存儲(chǔ)在客戶端的模式了

總結(jié)

如果能夠支持,會(huì)話用的數(shù)據(jù)量較小,對(duì)注銷可以等待超時(shí)的長效的場景,使用jwt作為會(huì)話數(shù)據(jù)存儲(chǔ)是會(huì)比較方便的。而對(duì)于會(huì)話數(shù)據(jù)量大的場景,還是使用一般的方式比較好點(diǎn)。

參考資料

RFC7529

轉(zhuǎn)載于:https://www.cnblogs.com/xiaohunshi/p/10358722.html

總結(jié)

以上是生活随笔為你收集整理的JSON WEB TOKEN(JWT)的分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。