JWT | 青训营

85 阅读2分钟

JWT

  • 全称是Json Web Token。

    • 基于RFC 7519开放标准的,它定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。
    • 经过数字签名的原因,这个信息可以用作验证和相互信任
    • JWT 可以使用密钥(使用 HMAC 算法)或使用 RSAECDSA 的公钥/私钥对进行签名。
  • 组成

    • HeaderPayloadSignature,中间通过.来分割

场景

  • 授权
    • 最常用场景
    • 用户登录后,每个后续请求都将包含 JWT,允许用户访问使用该令牌允许的路由、服务和资源。
    • 单点登录是当今广泛使用 JWT 的一项功能,因为它的开销很小,并且能够跨不同域轻松使用。
  • 信息交换
    • 相对cookie来说,较为安全而便捷的传输方式
    • JWT可以签名,使用公钥/私钥对保证发送者在授权范围内
    • 由于签名是使用标头和有效负载计算的,因此还可以验证内容是否未被篡改。

Header

  • 标识作用
    • typ:type 的简写,令牌类型,即JWT。
    • alg:Algorithm 的简写,加密签名算法。一般使用HS256,jwt官网提供了12种的加密算法
    • 常用声明:
      • image.png

Payload

  • 负载信息——需要传输的信息
  • 保留claims:主要包括iss发行者、exp过期时间、sub主题、aud用户等。
  • 公共claims:定义新创的信息,比如用户信息和其他重要信息。
  • 私有claims:用于发布者和消费者都同意以私有的方式使用的信息。
  • 常用:
    • image.png

Signatrue

  • 签名,对Header和Payload两部分的声明,作用防止JWT被篡改
  • Header中定义的签名算法( 
        base64编码(header) + "." + base64编码(payload), 
        secret 
    )
    
  • secret是存放在服务端加密使用到的盐

优缺点

  • 优点
    • 可扩展性好
      • 分部署部署优势,session的多台机器的数据共享,通常存在数据库或redis中
      • jwt不需要共享
    • 无状态
      • 不在服务端存储任何状态,发送请求总会返回带有参数的响应,不会产生附加影响
      • jwt载荷可以存储一些常用信息,用于交换信息,有效地使用JWT,可以降低服务器查询数据库地次数
  • 缺点
    • 安全性
      • payload使用base64编码,没有加密,因此在jwt中不能存储敏感信息
      • session信息存在服务端,相对安全
    • 一次性
      • 无状态导致的一次性
      • 修改里面的内容需要重新签发一个jwt

总结

  • 今日内容不多,但是要上手试试才行