Cookie、Session、Token、JWT

Session 介绍

Session 的优势

  • 相比 JWT,最大的优势在于可以主动清除 Session
  • Session 保存在服务器短,相对较为安全
  • 结合 cookie 使用,较为灵活,兼容性较好

Session 的劣势

  • cookie + session 在跨域场景表现并不好
  • 如果是分布式部署,需要做多机共享 session 机制
  • 基于 cookie 的机制很容易被 CSRF(跨站请求伪造)
  • 查询 Session 信息可能会有数据库查询操作

JWT 介绍

什么是 JWT

jwt 是 json web token 的圈层,它解决了 session 以上的问题,优点是服务器不保存任何会话数据,即服务器变为无状态,使其更容易扩展

JWT 的构成

Header(头部)+ Payload(有效载荷)+ Signature(签名)

  • typ:token 的类型,这里固定位 JWT
  • alg:使用 hash 算法,例如:RSA、SHA256 或者 HMAC

Payload

  • 存储需要传递的信息,如用户 ID、用户名等
  • 包含元数据,如过期时间、发布人等
  • 与 Header 不同 Payload 可以加密

Signature

  • 对 Header 和 Payload 部分进行签名
  • 保证 Token 在传输的过程中没有被篡改或者损坏

认证流程

  1. 客户端登录时传用户名、密码
  2. 服务器拿到用户名和密码后根据算法,生成 token,返回给浏览器
  3. 客户端拿到 token 后,存在本地存储中,再请求时带着 token 请求(一般放在 http header 中)
  4. 服务器拿着传来的 token ,验证其身份,返回资源

PS:服务器可以在 paylload 设置过期时间,如果过期,可以让客户端重新发起验证

JWT 缺点

  • 更多的空间占用

参考资料

Last Updated:
Contributors: johan