JWT 学习笔记

2024/5/31 笔记 JWT

JSON Web Token,是目前最流行的跨域认证解决方案,是一种基于Token的认证授权机制

JWT自身包含了身份验证所需要的所有信息,因此,服务器不需要存储Session信息

JWT 更符合设计RESTful API的 Stateless 原则

使用JWT认证可以有效避免CSRF攻击

组成

  • header:

    {
      "alg": "HS246",
        "typ": "JWT"
    }
    • 定义生成签名的算法
    • 定义Token类型
  • payload

    {
        "sub": "1234567890",
        "name": "Ethan",
        "admin": true,
        "iat": 1516239022
    }
    • 存放实际需要传输的数据
    • iat 是时间戳
  • signature

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      your-256-bit-secret
    )
    • 服务器通过payload、header、密钥使用header中指定的签名算法生成
  • 基本格式: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

用法

  • 用户向服务器发送登录表单
  • 校验正确,服务端返回已经签名的Token,即JWT
  • 用户以后每一次发送请求都在Header里带上这个JWT
  • 服务端检查JWT并从中获取用户信息

注意事项

  • 最好把JWT存在localStorage里面,防在Cookie里有CSRF风险
  • 常见做法是把JWT放在HTTP Header的 Authorization 字段中( Authorization: Bearer Token

安全性

img_show