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

JWT?Json?Web?Token全面詳解

 更新時(shí)間:2022年11月03日 17:03:40   作者:諳憶  
這篇文章主要為大家介紹了JWT?Json?Web?Token全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>

概述

最近學(xué)習(xí)了一下JWT,全名為Json Web Token,是一種自包含令牌。

在這里,我整理了一下網(wǎng)上資源。在文章最后,有一個(gè)使用Java實(shí)現(xiàn)JWT生成和驗(yàn)證的完整案例。

簡(jiǎn)單的說(shuō),就是基于JSON,在web環(huán)境下傳輸一個(gè)規(guī)定格式的字符串令牌。

廣義上講JWT,這是一個(gè)Web安全傳輸信息方式。狹義上來(lái)說(shuō),直接指?jìng)鬟f的令牌字符串。

JWT官網(wǎng)地址:https://jwt.io/ ,在這里,你可以體驗(yàn)一下形成的JWT字符串。

應(yīng)用場(chǎng)景

首先,我們需要知道,JWT無(wú)法用于數(shù)據(jù)加密。一般是用來(lái)身份提供者和服務(wù)者之間傳遞被認(rèn)證的用戶(hù)身份信息,以便于從資源服務(wù)器獲取到資源。

也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。

所以,可以推斷出,在以下場(chǎng)景中使用JWT是比較合適的。

  • 授權(quán):這是最常見(jiàn)的使用場(chǎng)景,解決單點(diǎn)登錄問(wèn)題。因?yàn)镴WT使用起來(lái)輕便,開(kāi)銷(xiāo)小,服務(wù)端不用記錄用戶(hù)狀態(tài)信息(無(wú)狀態(tài)),所以使用比較廣泛;
  • 信息交換:JWT是在各個(gè)服務(wù)之間安全傳輸信息的好方法。因?yàn)镴WT可以簽名,例如,使用公鑰/私鑰對(duì)兒 - 可以確定請(qǐng)求方是合法的。此外,由于使用標(biāo)頭和有效負(fù)載計(jì)算簽名,還可以驗(yàn)證內(nèi)容是否未被篡改。

JWT認(rèn)證過(guò)程

JWT官網(wǎng)有一張圖描述了JWT的認(rèn)證流程

流程說(shuō)明:

  • 1,瀏覽器發(fā)起請(qǐng)求登陸,攜帶用戶(hù)名和密碼;
  • 2,服務(wù)端驗(yàn)證身份,根據(jù)算法,將用戶(hù)標(biāo)識(shí)符打包生成 token,
  • 3,服務(wù)器返回JWT信息給瀏覽器,JWT不包含敏感信息;
  • 4,瀏覽器發(fā)起請(qǐng)求獲取用戶(hù)資料,把剛剛拿到的 token一起發(fā)送給服務(wù)器;
  • 5,服務(wù)器發(fā)現(xiàn)數(shù)據(jù)中有 token,驗(yàn)明正身;
  • 6,服務(wù)器返回該用戶(hù)的用戶(hù)資料;

JWT的數(shù)據(jù)結(jié)構(gòu)

JWT字符串的格式:

header.payload.signature

JWT通常由三部分組成,按照順序: 頭信息(header), 有效載荷(payload)和簽名(signature)。

header

header是一串描述JWT元數(shù)據(jù)的JSON字符串,例如:

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

HS256 表示使用了 HMAC-SHA256 來(lái)生成簽名。

最后使用Base64URL算法將上述JSON對(duì)象轉(zhuǎn)換為字符串保存。

其他還有一些簽名算法,可以去官網(wǎng)查看。

payload

Payload 部分也是一個(gè) JSON 對(duì)象,用來(lái)存放實(shí)際需要傳遞的數(shù)據(jù)。JWT 規(guī)定了7個(gè)官方字段,供選用。

 iss (issuer):簽發(fā)人
 exp (expiration time):過(guò)期時(shí)間(jwt的過(guò)期時(shí)間,這個(gè)過(guò)期時(shí)間必須要大于簽發(fā)時(shí)間)
 sub (subject):主題
 aud (audience):受眾
 nbf (Not Before):生效時(shí)間(定義在什么時(shí)間之前,該jwt都是不可用的.)
 iat (Issued At):簽發(fā)時(shí)間
 jti (JWT ID):編號(hào)(jwt的唯一身份標(biāo)識(shí),主要用來(lái)作為一次性token,從而回避重放攻擊。)

當(dāng)然,除了前面的字符串,這里也就是我們傳輸數(shù)據(jù)的地方??梢宰远x字段傳輸。例如:

 {
 "微信公眾號(hào)": "程序編程之旅",
 "姓名": "諳憶"
 }

當(dāng)然,我這里就是推廣下公眾號(hào),前面的key用了中文名,你別這么玩就行。

注意哦,這部分的數(shù)據(jù)默認(rèn)是不加密的。所以,如果有敏感信息,注意再使用加密算法把數(shù)據(jù)加密后傳輸即可。

這個(gè)JSON對(duì)象傳輸時(shí),也要使用Base64URL算法轉(zhuǎn)成字符串。

signature

簽名哈希部分是對(duì)上面兩部分?jǐn)?shù)據(jù)簽名,通過(guò)指定的算法生成哈希,以確保數(shù)據(jù)不會(huì)被篡改。

首先,需要指定一個(gè)密碼(secret)。該密碼保存在服務(wù)器中,并且不能向用戶(hù)公開(kāi)。然后,使用標(biāo)頭中指定的簽名算法(默認(rèn)情況下為HMAC SHA256)根據(jù)以下公式生成簽名。

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

token看起來(lái)像這樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

JWT的用法

客戶(hù)端接收服務(wù)器返回的JWT,將其存儲(chǔ)在Cookie或localStorage中。

此后,客戶(hù)端將在與服務(wù)器交互中都會(huì)帶JWT。如果將它存儲(chǔ)在Cookie中,就可以自動(dòng)發(fā)送,但是不會(huì)跨域,因此一般是將它放入HTTP請(qǐng)求的Header Authorization字段中。

當(dāng)跨域時(shí),也可以將JWT放置于POST請(qǐng)求的數(shù)據(jù)主體中。

JWT的優(yōu)缺點(diǎn)

1、JWT默認(rèn)不加密,所以可能導(dǎo)致數(shù)據(jù)泄露,但可以加密。生成原始令牌后,可以使用該令牌再次對(duì)其進(jìn)行加密。

2、當(dāng)JWT未加密時(shí),一些私密數(shù)據(jù)無(wú)法通過(guò)JWT傳輸。

3、JWT不僅可用于認(rèn)證,還可用于信息交換。善用JWT有助于減少服務(wù)器請(qǐng)求數(shù)據(jù)庫(kù)的次數(shù)。

4、JWT的最大缺點(diǎn)是服務(wù)器不保存會(huì)話(huà)狀態(tài),所以在使用期間不可能取消令牌或更改令牌的權(quán)限。也就是說(shuō),一旦JWT簽發(fā),在有效期內(nèi)將會(huì)一直有效。

5、JWT本身包含認(rèn)證信息,因此一旦信息泄露,任何人都可以獲得令牌的所有權(quán)限。為了減少盜用,JWT的有效期不宜設(shè)置太長(zhǎng)。對(duì)于某些重要操作,用戶(hù)在使用時(shí)應(yīng)該每次都進(jìn)行身份驗(yàn)證。

6、為了減少盜用和竊取,JWT不建議使用HTTP協(xié)議來(lái)傳輸代碼,而是使用加密的HTTPS協(xié)議進(jìn)行傳輸,防止服務(wù)器返回給用戶(hù)的JWT被攔截。

看著上面6點(diǎn),我的建議是,無(wú)論有沒(méi)有敏感數(shù)據(jù),對(duì)于用戶(hù)認(rèn)證信息數(shù)據(jù)做一層加密。最大程度上避免數(shù)據(jù)泄露造成問(wèn)題。

最后,強(qiáng)調(diào)一點(diǎn):JWT不是用來(lái)加密的,只是用來(lái)驗(yàn)證用戶(hù)的真實(shí)性以及請(qǐng)求來(lái)源的真實(shí)性。

以上就是JWT Json Web Token全面詳解的詳細(xì)內(nèi)容,更多關(guān)于JWT Json Web Token的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript函數(shù)調(diào)用經(jīng)典實(shí)例代碼

    JavaScript函數(shù)調(diào)用經(jīng)典實(shí)例代碼

    JavaScript提供了4種函數(shù)調(diào)用,一般形式的函數(shù)調(diào)用、作為對(duì)象的方法調(diào)用、使用 call 和 apply 動(dòng)態(tài)調(diào)用、使用 new 間接調(diào)用,下面這篇文章主要給大家介紹了關(guān)于JavaScript函數(shù)調(diào)用的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • ES6中Promise、async和await面試題整理

    ES6中Promise、async和await面試題整理

    promise是每個(gè)前端人必須會(huì)接觸到的一個(gè)知識(shí)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于ES6中Promise、async和await面試題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Layui實(shí)現(xiàn)主窗口和Iframe層參數(shù)傳遞

    Layui實(shí)現(xiàn)主窗口和Iframe層參數(shù)傳遞

    今天小編就為大家分享一篇Layui實(shí)現(xiàn)主窗口和Iframe層參數(shù)傳遞,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Javascript中字符串replace方法的第二個(gè)參數(shù)探究

    Javascript中字符串replace方法的第二個(gè)參數(shù)探究

    當(dāng)我們要把一段字符串中的某些指定字符替換掉,第一時(shí)間想到的就是replace方法,他的用法很簡(jiǎn)單,W3school上講的清晰易懂。網(wǎng)上有關(guān)replace的文章也有很多了,那么這篇這里主要聊聊它的第二個(gè)參數(shù),下面來(lái)一起看看,注意閱讀本文需要對(duì)replace方法有一定了解。
    2016-12-12
  • javascript+HTML5 Canvas繪制轉(zhuǎn)盤(pán)抽獎(jiǎng)

    javascript+HTML5 Canvas繪制轉(zhuǎn)盤(pán)抽獎(jiǎng)

    這篇文章主要為大家詳細(xì)介紹了javascrip+HTML5 Canvas繪制轉(zhuǎn)盤(pán)抽獎(jiǎng)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • js實(shí)現(xiàn)iPhone界面風(fēng)格的單選框和復(fù)選框按鈕實(shí)例

    js實(shí)現(xiàn)iPhone界面風(fēng)格的單選框和復(fù)選框按鈕實(shí)例

    這篇文章主要介紹了js實(shí)現(xiàn)iPhone界面風(fēng)格的單選框和復(fù)選框按鈕,涉及javascript動(dòng)態(tài)操作頁(yè)面元素樣式的相關(guān)技巧,非常美觀大方,需要的朋友可以參考下
    2015-08-08
  • webpack5新特性Asset?Modules資源模塊詳解

    webpack5新特性Asset?Modules資源模塊詳解

    這篇文章主要為大家介紹了webpack5新特性Asset?Modules資源模塊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • jsPDF導(dǎo)出PDF寬大于高異常處理

    jsPDF導(dǎo)出PDF寬大于高異常處理

    這篇文章主要為大家介紹了jsPDF導(dǎo)出PDF寬大于高異常處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • javascript完美拖拽的實(shí)現(xiàn)方法

    javascript完美拖拽的實(shí)現(xiàn)方法

    這篇文章介紹了javascript完美拖拽的實(shí)現(xiàn)方法,有需要的朋友可以參考一下
    2013-09-09
  • javascript改變this指向的方法匯總

    javascript改變this指向的方法匯總

    這篇文章主要介紹了javascript改變this指向的方法匯總的相關(guān)資料,需要的朋友可以參考下
    2022-09-09

最新評(píng)論

西昌市| 太原市| 莱西市| 读书| 缙云县| 黎平县| 内江市| 晋江市| 蕲春县| 泉州市| 庆城县| 孙吴县| 玉屏| 惠安县| 伊春市| 广宗县| 松溪县| 临澧县| 田林县| 夏邑县| 临猗县| 商洛市| 讷河市| 丹江口市| 雷波县| 同江市| 淮阳县| 织金县| 永靖县| 临武县| 潞西市| 塔城市| 湖州市| 浏阳市| 通许县| 霍州市| 敦化市| 揭东县| 绵阳市| 博白县| 历史|