JWT

JWT

Scroll Down

JSON WEB Token,是一种基于JSON的、用于在网络上声明某种主张的令牌(token)。JWT通常由三部分组成: 头信息(header), 消息体(payload)和签名(signature),token通常放在Authorization header中

结构

JSON Web Token由三部分组成,它们之间用圆点(.)连接,三部分分别使用Base64URL算法加密。

  • Header
  • Payload
  • Signature bg201807230320190517183213759.jpg

header由两部分组成:

  • token的类型(“JWT”)

  • 算法名称(如:HMAC SHA256或者RSA等等)

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

Payload

Payload部分也是一个JSON对象,用于存放服务端与客户端需要传递的用户登录信息,JWT规定了7个官方字段供选用,也可自定义字段

官方定义字段

  • iss (issuer):签发人
  • exp (expiration time):过期时间
  • sub (subject):主题
  • aud (audience):受众
  • nbf (Not Before):生效时间
  • iat (Issued At):签发时间
  • jti (JWT ID):编号

JWT默认是不加密的,所以不要存放敏感信息

Signature

Signature部分是对前两部分的加密签名,防止数据被篡改,服务器生成一个密钥并使用Header里指定的签名算法对前两部分加密生成签名,如果使用非对称加密还可以验证JWT的发送方是否为同一个客户端

优点

  1. 不仅可以认证,也可以交换信息,如果JWT中包含足够多的必需数据,就可以减少一部分权限相关的数据库查询
  2. 所有认证信息由客户端保存而非服务端,便于服务端横向拓展

缺点

  1. 除了等到过期时间到,无法作废已颁布的令牌(因为所有认证信息存在客户端)
  2. 将敏感的认证相关信息放在了客户端本地的cookie或者Local Storage中