JWT 介紹

JWT 全稱 JSON Web Tokens ,是一種規(guī)范化的 token。是對 token 這一技術(shù)提出一套規(guī)范。

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

頭部(header)
載荷(Payload)
簽名(Signature)

Header

頭部包含了兩部分,采用的簽名算法和token 類型

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

Payload

這部分就是我們存放信息的地方了屡立,你可以把用戶 ID 等信息放在這里(當(dāng)然用戶ID推薦加密后存放),JWT 規(guī)范里面對這部分有進(jìn)行了比較詳細(xì)的介紹搀军,常用的由 iss(簽發(fā)者)膨俐,iat(簽發(fā)時間),exp(過期時間)罩句,sub(面向的用戶)焚刺,aud(接收方)。

{
    "iss": "lion1ou JWT",
    "iat": 1441593502,
    "exp": 1441594722,
    "aud": "www.example.com",
    "sub": "example@163.com"
}

Signature

Header 和 Payload 編碼后的字符串拼接后再用HS256簽名算法(Header中alg指明的算法)加密门烂,在加密的過程中還需加上secret(密鑰)乳愉,最后得到簽名

Tips:Base64是一種編碼兄淫,并不是一種加密過程,不具備安全性蔓姚,所以敏感信息別放入其中

JWT 生成 TOKEN

  1. header json 的 base64 編碼為令牌第一部分
  2. payload json 的 base64 編碼為令牌第二部分
  3. 拼裝第一捕虽、第二部分編碼后的 json 以及 secret 進(jìn)行簽名的令牌的第三部分

偽代碼如下:

// 頭部
header = '{"alg":"HS256","typ":"JWT"}'

// 載荷
payload = '{"loggedInAs":"admin","iat":1422779638}'

// 對 header 和 payload 分別進(jìn)行 base64 編碼后拼接起來進(jìn)行 hash 運算得到簽名
signature = HMAC-SHA256(encodeBase64Url(header) + "." + encodeBase64Url(payload),secret)

// 最后將三部分進(jìn)行 base64 編碼后再拼接即可得到 token坡脐。
json_web_token = encodeBase64Url(header) + '.' + encodeBase64Url(payload) + '.' + encodeBase64Url(signature)

JWT 使用

請求

  • url 參數(shù):?token=你的token
  • header 中:Authorization:Bearer <token>(推薦)

注意Bearer和token之間有一個空格

接收

前端接收到后端返回的 token 后進(jìn)行存儲薯鳍,一般存儲在:

  1. LocalStorage
  2. SessionStorage
  3. Cookie

JWT 的優(yōu)勢和問題

優(yōu)勢

  1. 防 CSRF
  2. 適合移動應(yīng)用
  3. 無狀態(tài)的 RESTful API
  4. 一次性驗證(如郵件激活)

問題

  1. 續(xù)簽問題
  2. 注銷問題

JWT 安全

  • 使用 HTTPS
  • 縮短 token 有效時間
  • 定期更新密鑰
  • 使用HttpOnly屬性來防止Cookie被JavaScript讀取,防止 XSS 攻擊竊取 cookie
  • 不要在token中編碼敏感信息挨措,如果一定會有那必須先加密再進(jìn)行編碼
  • 根據(jù)需要可將用戶 IP 放入 Payload 進(jìn)行校驗
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市崩溪,隨后出現(xiàn)的幾起案子浅役,更是在濱河造成了極大的恐慌,老刑警劉巖伶唯,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件觉既,死亡現(xiàn)場離奇詭異,居然都是意外死亡乳幸,警方通過查閱死者的電腦和手機瞪讼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粹断,“玉大人符欠,你說我怎么就攤上這事∑柯瘢” “怎么了希柿?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長养筒。 經(jīng)常有香客問我曾撤,道長,這世上最難降的妖魔是什么晕粪? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任挤悉,我火速辦了婚禮,結(jié)果婚禮上巫湘,老公的妹妹穿的比我還像新娘装悲。我一直安慰自己,他們只是感情好尚氛,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布衅斩。 她就那樣靜靜地躺著,像睡著了一般怠褐。 火紅的嫁衣襯著肌膚如雪畏梆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音奠涌,去河邊找鬼宪巨。 笑死,一個胖子當(dāng)著我的面吹牛溜畅,可吹牛的內(nèi)容都是我干的捏卓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慈格,長吁一口氣:“原來是場噩夢啊……” “哼怠晴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浴捆,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蒜田,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后选泻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冲粤,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年页眯,在試婚紗的時候發(fā)現(xiàn)自己被綠了梯捕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡窝撵,死狀恐怖傀顾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碌奉,我是刑警寧澤锣笨,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站道批,受9級特大地震影響错英,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隆豹,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一椭岩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧璃赡,春花似錦判哥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侯谁,卻和暖如春锌仅,著一層夾襖步出監(jiān)牢的瞬間章钾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工热芹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贱傀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓伊脓,卻偏偏與公主長得像府寒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子报腔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355