JWT初識

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)

頭部承載兩部分信息:

  1. 聲明類型
  2. 聲明加密的算法

例如:

{
  "alg": "HS256",
  "typ": "JWT"
}

而後將頭部進行base64加密,構成token的第一部分:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

第二部分:載荷(payload)

存放有效信息的地方,包括三個部分

  1. RFC7519標準中註冊的聲明
  2. 公共的聲明
  3. 私有的聲明

標準中註冊的聲明有:

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

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

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

定義一個payload:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

而後將其進行base64加密,獲得Jwt的第二部分:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

第三部分:簽證(signature)

簽證信息有三部分組成:

  1. header(base64加密後)
  2. payload(base64加密後)
  3. secret

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

密鑰secret是保存在服務端的,服務端會根據這個密鑰進行生成token和驗證,因此須要保護好。

https://jwt.io

https://tools.ietf.org/pdf/rfc7519.pdf

http://www.javashuo.com/article/p-pyeefogx-eu.html

http://www.javashuo.com/article/p-culskyvc-r.html

相關文章
相關標籤/搜索