JWT

JWT 介紹

JSON Web Token(JWT)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于 JSON 的開放標準(RFC 7519)箫措。來自 JWT RFC 7519 標準化的摘要說明:JSON Web Token 是一種緊湊的,URL 安全的方式权薯,表示要在雙方之間傳輸?shù)穆暶鳌WT 一般被用來在身份提供者和服務(wù)提供者間傳遞被認證的用戶身份信息锣枝,以便于從資源服務(wù)器獲取資源扫尺,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該 Token 也可直接被用于認證咒彤,也可被加密疆柔。

JWT 認證流程

  1. 客戶端調(diào)用登錄接口(或者獲取 token 接口),傳入用戶名密碼镶柱。
  2. 服務(wù)端請求身份認證中心旷档,確認用戶名密碼正確。
  3. 服務(wù)端創(chuàng)建 JWT歇拆,返回給客戶端鞋屈。
  4. 客戶端拿到 JWT,進行存儲(可以存儲在緩存中故觅,也可以存儲在數(shù)據(jù)庫中厂庇,如果是瀏覽器,可以存儲在 Cookie 中)在后續(xù)請求中输吏,在 HTTP 請求頭中加上 JWT权旷。
  5. 服務(wù)端校驗 JWT,校驗通過后评也,返回相關(guān)資源和數(shù)據(jù)炼杖。

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

JWT 是由三段信息構(gòu)成的灭返,第一段為頭部(Header)盗迟,第二段為載荷(Payload),第三段為簽名(Signature)熙含。每一段內(nèi)容都是一個 JSON 對象罚缕,將每一段 JSON 對象采用 BASE64 編碼,將編碼后的內(nèi)容用. 鏈接一起就構(gòu)成了 JWT 字符串怎静。如下:

header.payload.signature

1. 頭部(Header)

頭部用于描述關(guān)于該 JWT 的最基本的信息邮弹,例如其類型以及簽名所用的算法等。這也可以被表示成一個 JSON 對象蚓聘。

<pre>{
"typ": "JWT",
"alg": "HS256"
}</pre>

在頭部指明了簽名算法是 HS256 算法腌乡。

2. 載荷(payload)

載荷就是存放有效信息的地方。有效信息包含三個部分:

  • 標準中注冊的聲明

  • 公共的聲明

  • 私有的聲明

標準中注冊的聲明(建議但不強制使用):

  • iss:JWT 簽發(fā)者

  • sub:JWT 所面向的用戶

  • aud:接收 JWT 的一方

  • exp:JWT 的過期時間夜牡,這個過期時間必須要大于簽發(fā)時間

  • nbf:定義在什么時間之前与纽,該 JWT 都是不可用的

  • iat:JWT 的簽發(fā)時間

  • jti:JWT 的唯一身份標識,主要用來作為一次性 token, 從而回避重放攻擊塘装。

公共的聲明 :

公共的聲明可以添加任何的信息急迂,一般添加用戶的相關(guān)信息或其他業(yè)務(wù)需要的必要信息. 但不建議添加敏感信息,因為該部分在客戶端可解密蹦肴。

私有的聲明 :

私有聲明是提供者和消費者所共同定義的聲明僚碎,一般不建議存放敏感信息,因為 base64 是對稱解密的阴幌,意味著該部分信息可以歸類為明文信息勺阐。

示例如下:

<pre>{ "iss": "Online JWT Builder",
"iat": 1416797419,
"exp": 1448333419,
"aud": "www.primeton.com",
"sub": "devops@primeton.com",
"GivenName": "dragon",
"Surname": "wang",
"admin": true
}</pre>

3. 簽名(signature)

創(chuàng)建簽名需要使用 Base64 編碼后的 header 和 payload 以及一個秘鑰卷中。將 base64 加密后的 header 和 base64 加密后的 payload 使用. 連接組成的字符串,通過 header 中聲明的加密方式進行加鹽 secret 組合加密皆看,然后就構(gòu)成了 jwt 的第三部分仓坞。

比如:HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

JWT 的優(yōu)點:

  1. 跨語言,JSON 的格式保證了跨語言的支撐
  2. 基于 Token腰吟,無狀態(tài)
  3. 占用字節(jié)小无埃,便于傳輸

關(guān)于 Token 注銷:

Token 的注銷,由于 Token 不存儲在服務(wù)端毛雇,由客戶端存儲嫉称,當(dāng)用戶注銷時,Token 的有效時間還沒有到灵疮,還是有效的织阅。所以如何在用戶注銷登錄時讓 Token 注銷是一個要關(guān)注的點。一般有如下幾種方式:

  1. Token 存儲在 Cookie 中震捣,這樣客戶端注銷時荔棉,自然可以清空掉
  2. 注銷時,將 Token 存放到分布式緩存中蒿赢,每次校驗 Token 時去檢查下該 Token 是否已注銷润樱。不過這樣也就失去了快速校驗 Token 的優(yōu)點。
  3. 多采用短期令牌羡棵,比如令牌有效期是 20 分鐘壹若,這樣可以一定程度上降低注銷后 Token 可用性的風(fēng)險。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末皂冰,一起剝皮案震驚了整個濱河市店展,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秃流,老刑警劉巖赂蕴,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舶胀,居然都是意外死亡概说,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門峻贮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來席怪,“玉大人,你說我怎么就攤上這事纤控」夷恚” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵船万,是天一觀的道長刻撒。 經(jīng)常有香客問我骨田,道長,這世上最難降的妖魔是什么声怔? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任态贤,我火速辦了婚禮,結(jié)果婚禮上醋火,老公的妹妹穿的比我還像新娘悠汽。我一直安慰自己避乏,他們只是感情好妓美,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堵第,像睡著了一般兆旬。 火紅的嫁衣襯著肌膚如雪假抄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天丽猬,我揣著相機與錄音宿饱,去河邊找鬼。 笑死脚祟,一個胖子當(dāng)著我的面吹牛谬以,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愚铡,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蛉签,長吁一口氣:“原來是場噩夢啊……” “哼胡陪!你這毒婦竟也來了沥寥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤柠座,失蹤者是張志新(化名)和其女友劉穎邑雅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妈经,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡淮野,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吹泡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骤星。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖爆哑,靈堂內(nèi)的尸體忽然破棺而出洞难,到底是詐尸還是另有隱情,我是刑警寧澤揭朝,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布队贱,位于F島的核電站色冀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柱嫌。R本人自食惡果不足惜锋恬,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望编丘。 院中可真熱鬧与学,春花似錦、人聲如沸嘉抓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掌眠。三九已至蕾盯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蓝丙,已是汗流浹背级遭。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渺尘,地道東北人挫鸽。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像鸥跟,于是被迫代替她去往敵國和親丢郊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容