JWT 筆記

JWT 筆記

***參考鏈接

參考鏈接1

參考鏈接2

官方庫

當使用一個API時,其中一個挑戰(zhàn)就是認證(authentication)盟榴。在傳統(tǒng)的web應(yīng)用中,服務(wù)端成功的返回一個響應(yīng)(response)依賴于兩件事。一是吨掌,他通過一種存儲機制保存了會話信息(Session)斩个。每一個會話都有它獨特的信息(id)胯杭,常常是一個長的,隨機化的字符串受啥,它被用來讓未來的請求(Request)檢索信息做个。其次,包含在響應(yīng)頭(Header)里面的信息使客戶端保存了一個Cookie滚局。服務(wù)器自動的在每個子請求里面加上了會話ID居暖,這使得服務(wù)器可以通過檢索Session中的信息來辨別用戶。這就是傳統(tǒng)的web應(yīng)用逃避HTTP面向無連接的方法藤肢。

Token

不是在每一次請求時提供用戶名和密碼的憑證太闺。我們可以讓用戶通過token交換憑證(we can allow the client to exchange valid credentials for a token),這個token提供用戶訪問服務(wù)器的權(quán)限嘁圈。Token通常比密碼更加長而且復雜省骂。比如說,JWTs通常會應(yīng)對長達150個字符丑孩。一旦獲得了token冀宴,在每次調(diào)用API的時候都要附加上它。然后温学,這仍然比直接發(fā)送賬戶和密碼更加安全略贮,哪怕是HTTPS。

把token想象成一個安全的護照仗岖。你在一個安全的前臺驗證你的身份(通過你的用戶名和密碼)逃延,如果你成功驗證了自己,你就可以取得這個轧拄。當你走進大樓的時候(試圖從調(diào)用API獲取資源)揽祥,你會被要求驗證你的護照,而不是在前臺重新驗證檩电。

什么是 JWT 拄丰?

JWT -- JSON Web Token府树,它是基于 RFC 7519 所定義的一種在各個系統(tǒng)中傳遞緊湊和自包含的 JSON 數(shù)據(jù)形式。

  • 緊湊(Compact) :由于傳送的數(shù)據(jù)小料按,JWT 可以通過GET奄侠、POST 和 放在 HTTP 的 header 中,同時也是因為小也能傳送的更快载矿。
  • 自包含(self-contained) : Payload 中能夠包含用戶的信息垄潮,避免數(shù)據(jù)庫的查詢。

JSON Web Token 由三部分組成使用 . 分割開:

  • Header
  • Payload
  • Signature

一個 JWT 形式上類似于下面的樣子:

xxxxx.yyyy.zzzz

Header 一般由兩個部分組成:

  • alg
  • typ

alg 是指所使用的 hash 算法,例如 HMAC SHA256 或 RSA闷盔,typ 是 Token 的類型弯洗。

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

然后使用 Base64Url 編碼成第一部分。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<second part>.<third part>

Payload

這一部分是 JWT 主要的信息存儲部分逢勾,其中包含了許多種的聲明(claims)牡整。

Claims 的實體一般包含用戶和一些元數(shù)據(jù),這些 claims 分成三種類型:reserved, public, 和 private claims溺拱。

  • (保留聲明)reserved claims :預定義的 一些聲明果正,并不是強制的但是推薦。它們包括:

    • iss (issuer) 該JWT的簽發(fā)者
    • exp (expiration time) 什么時候過期盟迟,這里是一個Unix時間戳
    • sub (subject) 該JWT所面向的用戶
    • aud(audience) 接收該JWT的一方
    • iat(issued at): 在什么時候簽發(fā)的
    • 這里都使用三個字母的原因是保證 JWT 的緊湊
  • (公有聲明)public claims : 這個部分可以隨便定義,但是要注意和 IANA JSON Web Token 沖突潦闲。

  • (私有聲明)private claims : 這個部分是共享被認定信息中自定義部分攒菠。

一個 Pyload 可以是這樣子的:

{
  "iss": "joe",
  "exp": 1300819380,
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
  "iat": 1441593502,
  "aud": "www.example.com",
  "from_user": "B",
  "target_user": "A"
}

這部分同樣使用 Base64Url 編碼成第二部分。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.<third part>

Signature

在創(chuàng)建該部分時候你應(yīng)該已經(jīng)有了 編碼后的 Header 和 Payload 還需要一個秘鑰歉闰,這個加密的算法應(yīng)該 Header 中指定辖众。

一個使用 HMAC SHA256 的例子如下:

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

這個 signature 是用來驗證發(fā)送者的 JWT 的同時也能確保在期間不被篡改。

所以和敬,最后你的一個完整的 JWT 應(yīng)該是如下形式:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

注意?被 . 分割開的三個部分

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凹炸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昼弟,更是在濱河造成了極大的恐慌啤它,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舱痘,死亡現(xiàn)場離奇詭異变骡,居然都是意外死亡,警方通過查閱死者的電腦和手機芭逝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門塌碌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旬盯,你說我怎么就攤上這事台妆◆崦停” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵接剩,是天一觀的道長切厘。 經(jīng)常有香客問我,道長搂漠,這世上最難降的妖魔是什么迂卢? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮桐汤,結(jié)果婚禮上而克,老公的妹妹穿的比我還像新娘。我一直安慰自己怔毛,他們只是感情好员萍,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拣度,像睡著了一般碎绎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抗果,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天筋帖,我揣著相機與錄音,去河邊找鬼冤馏。 笑死日麸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逮光。 我是一名探鬼主播代箭,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涕刚!你這毒婦竟也來了嗡综?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤杜漠,失蹤者是張志新(化名)和其女友劉穎极景,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碑幅,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡戴陡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沟涨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恤批。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖裹赴,靈堂內(nèi)的尸體忽然破棺而出喜庞,到底是詐尸還是另有隱情诀浪,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布延都,位于F島的核電站雷猪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晰房。R本人自食惡果不足惜求摇,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望殊者。 院中可真熱鬧与境,春花似錦、人聲如沸猖吴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽海蔽。三九已至共屈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間党窜,已是汗流浹背拗引。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幌衣,地道東北人寺擂。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像泼掠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子垦细,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理择镇,服務(wù)發(fā)現(xiàn),斷路器括改,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 轉(zhuǎn)載本文需注明出處:微信公眾號EAWorld腻豌,違者必究。 本文目錄: 一嘱能、單體應(yīng)用 VS 微服務(wù) 二吝梅、微服務(wù)常見安...
    72a1f772fe47閱讀 8,555評論 3 25
  • 本文目錄:一、單體應(yīng)用 VS 微服務(wù)二惹骂、微服務(wù)常見安全認證方案三苏携、JWT介紹四、OAuth 2.0 介紹五对粪、思考總...
    挨踢的懶貓閱讀 17,970評論 5 29
  • 1. 微服務(wù)架構(gòu)介紹 1.1 什么是微服務(wù)架構(gòu)右冻? 形像一點來說装蓬,微服務(wù)架構(gòu)就像搭積木,每個微服務(wù)都是一個零件纱扭,并使...
    靜修佛緣閱讀 6,641評論 0 39
  • 概述 JSON Web令牌(JWT)是一個緊湊的采用URL安全表示方法的聲明牍帚,用于在兩方之間傳輸。JWT的聲明被編...
    御淺永夜閱讀 5,169評論 0 0