瞭解 JWT

JWT官網:https://jwt.io/前端

一:JWT簡介算法

JWT全名JSON WEB TOKEN,是一個JSON網絡令牌,JWT是一個輕便的安全跨平臺傳輸格式,定義了一個緊湊的自包含的方式在不一樣實體之間安全傳輸信息(JSON格式)。它是在Web環境下兩個實體之間傳輸數據的一項標準。實際上傳輸的就是一個字符串。廣義上講JWT是一個標準的名稱;狹義上JWT指的就是用來傳遞的那個token字符串後端

二:JWT做用安全

因爲http協議是無狀態的,因此客戶端每次訪問都是新的請求。這樣每次請求都須要驗證身份,傳統方式是用session+cookie來記錄/傳輸用戶信息,而JWT就是更安全方便的方式。它的特色就是簡潔,緊湊和自包含,並且不佔空間,傳輸速度快,並且有利於多端分離,接口的交互等等,JWT是一種Token規範,主要面向的仍是登陸、驗證和受權方向,固然也能夠用只來傳遞信息。通常都是存在header裏服務器

三:JWT結構cookie

JWT一共分爲三個部分:Header(頭部) . Payload(負載) . Signature(簽名) ;網絡

1:Header(頭部)session

Header 部分是一個 JSON 對象,描述 JWT 的元數據,一般是下面的樣子:前後端分離

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

字段 全稱 描述
alg algorithm 是簽名的算法;通常是 HS256
typ type 固定值爲 JWT
二:PayLoad(負載)
Payload 部分也是一個 JSON 對象,用來存放實際須要傳遞的數據。JWT 規定了7個官方字段,供選用:加密

{
    "iss": "d8b832c0c8caf0d99e9406ed",
    "sub": "1",
    "aud": "baijunyao",
    "iat": "1557066830",
    "nbf": "1557066840",
    "exp": "1557066850",
    "jti": "9e9668d8b8306ed8caf0d94"
}

字段 全稱 描述
iss issuer 發佈者
sub subject 面向的用戶
aud audience 受衆
iat issued at 簽發時間的時間戳
nbf not before 生效時間的時間戳
exp expiration time 過時時間的時間戳
jti jwt id 每一個 JWT 本身的惟一 id
除了官方定義的這些字段,咱們也能夠本身定義一些本身須要的字段

三:Signature(簽名)

Signature 部分是對前兩部分的簽名,防止數據篡改,默認使用 HS256 算法進行簽名;

簽名的方式是把 頭部和負載分別 base64UrlEncode 後用 . 拼接起來使用 Secret 進行 HS256 ;

Signature = HS256(base64UrlEncode(Header) . base64UrlEncode(Payload), Secret)

四:JWT

JWT一共由Header(頭部) . Payload(負載) . Signature(簽名) 組成,咱們把 base64UrlEncode 的頭部和負載以及簽名用 . 拼接起來就是一個 JWT 了

JWT = base64UrlEncode(Header) . base64UrlEncode(Payload) . HS256(base64UrlEncode(Header) . base64UrlEncode(Payload), Secret)

因爲JWT 中的 Header 和 Payload 是使用 base64UrlEncode 進行加密的; 任何人均可以很是輕鬆的就使用 base64UrlDecode 進行解密,因此JWT中千萬不要存儲敏感數據,WT 是由服務器端生成返回給前端的; 前端在發送請求的時候通常把 JWT 放在 HTTP Headers 中的 Authorization 字段中,也能夠直接放在URl連接上

五:JWT特色

1:優勢

(1)相比於 session 少了讀取文件的步驟,效率更高,方便擴展

(2)由於不使用 cookie 天生免疫 CSRF 攻擊

(3)由於不使用 cookie 不用擔憂用戶禁用 cookie ;不用懸掛本站須要使用 cookie 的提示信息;

(4)適合 APP 先後端分離的場景

2:缺點

(1)一旦簽發不能撤銷 沒有相似清空 session 的操做

(2)不能自動續簽

相關文章
相關標籤/搜索