JSON Web Token(JWT)是一個很是輕巧的規範。這個規範容許咱們使用JWT在用戶和服務器之間傳遞安全可靠的信息。算法
一個JWT實際上就是一個字符串,它由三部分組成,頭部、載荷與簽名。安全
1.頭部服務器
頭部用於描述關於該JWT的最基本的信息,例如其類型以及簽名所用的算法等。這也能夠被表示成一個JSON對象。加密
{"typ":"JWT","alg":"HS256"}spa
2.載荷jwt
載荷就是存放有效信息的地方。這個名字像是特指飛機上承載的貨品,這些有效信息包含三個部分對象
(1)標準中註冊的聲明(建議但不強制使用)字符串
(2)公共的聲明get
公共的聲明能夠添加任何的信息,通常添加用戶的相關信息或其餘業務須要的必要信息.但不建議添加敏感信息,由於該部分在客戶端可解密.base64
(3)私有的聲明
私有聲明是提供者和消費者所共同定義的聲明,通常不建議存放敏感信息,由於base64是對稱解密的,意味着該部分信息能夠歸類爲明文信息。
定義一個payload:
{"sub":"1234567890","name":"John Doe","admin":true}
而後將其進行base64加密,獲得Jwt的第二部分:
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
3.簽證
jwt的第三部分是一個簽證信息,這個簽證信息由三部分組成:
header (base64後的)
payload (base64後的)
secret
這個部分須要base64加密後的header和base64加密後的payload使用.鏈接組成的字符串,而後經過header中聲明的加密方式進行加鹽secret組合加密,而後就構成了jwt的第三部分。
注意:
secret是保存在服務器端的,jwt的簽發生成也是在服務器端的,secret就是用來進行jwt的簽發和jwt的驗證,因此,它就是你服務端的私鑰,在任何場景都不該該流露出去。一旦客戶端得知這個secret, 那就意味着客戶端是能夠自我簽發jwt了。
https://www.jianshu.com/p/99a458c62aa4
注意:
JWT是保存在客戶端的,服務器只是對Token進行合法性驗證,並不保存
JWTS比較侷限,( JWT簽名算法中,通常有兩個選擇,一個採用HS256,另一個就是採用RS256)實際生產中,不安全。生產環境中會用反覆,加解密,而且可能會首先加嚴