Json web token (JWT), 是爲了在網絡應用環境間傳遞聲明而執行的一種基於JSON的開放標準(RFC 7519).該token被設計爲緊湊且安全的,特別適用於分佈式站點的單點登陸(SSO)場景。html
JWT的聲明通常被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便於從資源服務器獲取資源,也能夠增長一些額外的其它業務邏輯所必須的聲明信息,該token也可直接被用於認證,也可被加密。web
JWT的構成算法
第一部分咱們稱它爲頭部(header)json
第二部分咱們稱其爲載荷(payload)安全
第三部分是簽證(signature).bash
jwt的頭部承載兩部分信息:服務器
完整的頭部就像下面這樣的JSON:網絡
而後將頭部進行base64加密(該加密是能夠對稱解密的),構成了第一部分.分佈式
載荷就是存放有效信息的地方。這個名字像是特指飛機上承載的貨品,這些有效信息包含三個部分加密
標準中註冊的聲明 (建議但不強制使用) :
公共的聲明 :
公共的聲明能夠添加任何的信息,通常添加用戶的相關信息或其餘業務須要的必要信息.但不建議添加敏感信息,由於該部分在客戶端可解密.
私有的聲明 :
私有聲明是提供者和消費者所共同定義的聲明,通常不建議存放敏感信息,由於base64是對稱解密的,意味着該部分信息能夠歸類爲明文信息。
定義一個payload:
而後將其進行base64加密,獲得Jwt的第二部分。
jwt的第三部分是一個簽證信息,這個簽證信息由三部分組成:
這個部分須要base64加密後的header和base64加密後的payload使用.
鏈接組成的字符串,而後經過header中聲明的加密方式進行加密 secret
組合加密,而後就構成了jwt的第三部分。
.
鏈接成一個完整的字符串,構成了最終的jwt:
在請求頭裏加入Authorization
,並加上Token
標註:
headers: { 'Authorization': 'Token' + token }
服務端會驗證token,若是驗證經過就會返回相應的資源。整個流程就是這樣的: