JSON Web Token (JWT)git
Abstract算法
JSON Web Token (JWT) is a compact, URL-safe means of representing加密
claims to be transferred between two parties. The claims in a JWT.net
are encoded as a JSON object that is used as the payload of a JSONcode
Web Signature (JWS) structure or as the plaintext of a JSON Webjwt
Encryption (JWE) structure, enabling the claims to be digitallyblog
signed or integrity protected with a Message Authentication Codetoken
(MAC) and/or encrypted.ci
JWT example:字符串
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT的構成:
第一部分:頭部(header)
頭部承載兩部分信息:
例如:
{ "alg": "HS256", "typ": "JWT" }
而後將頭部進行base64加密,構成token的第一部分:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
第二部分:載荷(payload)
存放有效信息的地方,包括三個部分
標準中註冊的聲明有:
公共的聲明能夠添加任何的信息,通常添加用戶的相關信息或其餘業務須要的必要信息.但不建議添加敏感信息,由於該部分在客戶端可解密.
私有聲明是提供者和消費者所共同定義的聲明,通常不建議存放敏感信息,由於base64是對稱解密的,意味着該部分信息能夠歸類爲明文信息。
定義一個payload:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
而後將其進行base64加密,獲得Jwt的第二部分:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
第三部分:簽證(signature)
簽證信息有三部分組成:
簽證須要把base64加密後的header和base64加密後的payload使用.鏈接組成字符串,而後經過header中聲明的加密方式進行加鹽secret組合加密,而後就構成了jwt的第三部分: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
密鑰secret是保存在服務端的,服務端會根據這個密鑰進行生成token和驗證,因此須要保護好。
https://tools.ietf.org/pdf/rfc7519.pdf