JWT

JSON WEB TOKEN
使用場景:
         Authorization (受權) : 這是使用JWT的最多見場景。一旦用戶登陸,後續每一個請求都將包含JWT,容許用戶訪問該令牌容許的路由、服務和資源。單點登陸是如今普遍使用的JWT的一個特性,由於它的開銷很小,而且能夠輕鬆地跨域使用。
         Information Exchange (信息交換) : 對於安全的在各方之間傳輸信息而言,JSON Web Tokens無疑是一種很好的方式。由於JWTs能夠被簽名,例如,用公鑰/私鑰對,你能夠肯定發送人就是它們所說的那我的。另外,因爲簽名是使用頭和有效負載計算的,您還能夠驗證內容沒有被篡改。

session和cookie侷限性
session和cookie都是客戶端與服務端通信須要提供的認證,當客戶端的值和服務器的值吻合時,才容許請求api,解決了第1個問題,可是當攻擊者獲取到了傳輸過程當中的session或者cookie值後,就能夠進行第二、3種攻擊了
 
token結構:
         1.header(頭部),頭部信息主要包括(token的類型(「JWT」)和算法名稱(好比:HMAC SHA256或者RSA等等))
         2.poyload(負荷),負荷基本就是本身想要存放的信息(由於信息會暴露,不該該在載荷裏面加入任何敏感的數據)。它包含聲明(要求)。聲明是關於實體(一般是用戶)和其餘數據的聲明。聲明有三種類型: registered, public 和 private。
             Registered claims : 這裏有一組預約義的聲明,它們不是強制的,可是推薦。好比:iss (issuer), exp (expiration time), sub (subject),     aud (audience)等。
             Public claims : 能夠隨意定義。
             Private claims : 用於在贊成使用它們的各方之間共享信息,而且不是註冊的或公開的聲明。
         3.sign(簽名),簽名的做用就是爲了防止惡意篡改數據
 
token的好處:
         無狀態和可擴展性:Tokens存儲在客戶端。徹底無狀態,可擴展。咱們的負載均衡器能夠將用戶傳遞到任意服務器,由於在任何地方都沒有狀態或會話信息。
         安全:Token不是Cookie。(The token, not a cookie.)每次請求的時候Token都會被髮送。並且,因爲沒有Cookie被髮送,還有助於防止CSRF攻擊。即便在你的實現中將token存儲到客戶端的Cookie中,這個Cookie也只是一種存儲機制,而非身份認證機制。沒有基於會話的信息能夠操做,由於咱們沒有會話!
 
JWT與OAuth2的區別:
         OAuth2是一種受權框架 ,JWT是一種認證協議          不管使用哪一種方式切記用HTTPS來保證數據的安全性          OAuth2用在使用第三方帳號登陸的狀況(好比使用weibo, qq, github登陸某個app),而JWT是用在先後端分離, 須要簡單的對後臺API進行保護時使用。
相關文章
相關標籤/搜索