JWT

  (JSON Web Token)JWT,本質是一個token。算法

  • 是一種緊湊的URL安全方法,用於在網絡通訊的雙方之間傳遞。
  • 通常放在HTTP的headers 參數裏面的authorization裏面,值的前面加Bearer關鍵字和空格。
  • 主要用於身份認證和信息交換。
  • 由三部分組成: 第一部分咱們稱它爲頭部(header),第二部分咱們稱其爲載荷(payload,相似於飛機上承載的物品),第三部分是簽證(signature)。

header

jwt的頭部承載兩部分信息:安全

  • 聲明類型,這裏是jwt
  • 聲明加密的算法 一般直接使用 HMAC SHA256

 

playload

載荷就是存放有效信息的地方。這個名字像是特指飛機上承載的貨品,這些有效信息包含三個部分服務器

  • 標準中註冊的聲明
  • 公共的聲明
  • 私有的聲明

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

  • iss: jwt簽發者
  • sub: jwt所面向的用戶
  • aud: 接收jwt的一方
  • exp: jwt的過時時間,這個過時時間必需要大於簽發時間
  • nbf: 定義在什麼時間以前,該jwt都是不可用的.
  • iat: jwt的簽發時間
  • jti: jwt的惟一身份標識,主要用來做爲一次性token,從而回避重放攻擊。

公共的聲明
公共的聲明能夠添加任何的信息,通常添加用戶的相關信息或其餘業務須要的必要信息.但不建議添加敏感信息,由於該部分在客戶端可解密.網絡

私有的聲明
私有聲明是提供者和消費者所共同定義的聲明,通常不建議存放敏感信息,由於base64是對稱解密的,意味着該部分信息能夠歸類爲明文信息。session

signature

jwt的第三部分是一個簽證信息,這個簽證信息由三部分組成:網站

  • header (base64後的)
  • payload (base64後的)
  • secret

這個部分須要base64加密後的header和base64加密後的payload使用.鏈接組成的字符串,而後經過header中聲明的加密方式進行加鹽secret組合加密,而後就構成了jwt的第三部分。編碼

 
流程:

     1. 用戶導航到登陸頁,輸入用戶名和密碼,進行登陸
     2. 服務器對登陸用戶進行認證,若是認證經過,根據用戶的信息和JWT的生成規則生成JWT Token
     3. 服務器將該Token字符串返回
     4. 客戶端獲得Token信息,將Token存儲在localStorage、sessionStorage或cookie等存儲形式中。
     5. 當用戶請求服務器API時,在請求的Header中加入 Authorization:Token。
     6. 服務端對此Token進行校驗,若是合法就解析其中內容,根據其擁有的權限和本身的業務邏輯給出響應結果,若是不經過,返回HTTP 401。
     7. 用戶進入系統,得到請求資源加密

 

      JWT自己的實現很是簡單,雖然很高效的完成了用戶認證,但網站的安全性問題是一個很是重要且關鍵的問題,經過上面的JWT生成過程咱們能夠很清楚的知道,JWT自己沒有作加密處理,都是經過Base64進行編碼後方便經過HTTP傳輸而已,Header和Payload信息都是能夠經過Base64解碼進行查看的。爲保證用戶密、密碼驗證過程的安全性,敏感信息須要在網絡中傳輸,Token信息也會在Request請求信息中看到,所以,這個過程建議將網站進行SSL加密傳輸,採用HTTPS協議,以確保通道的安全性。在Payload中儘可能少帶敏感性信息,只帶ID等無關網站安全的信息。spa

相關文章
相關標籤/搜索