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(签名)
Header
- typ:token 的类型,这里固定位 JWT
- alg:使用 hash 算法,例如:RSA、SHA256 或者 HMAC
Payload
- 存储需要传递的信息,如用户 ID、用户名等
- 包含元数据,如过期时间、发布人等
- 与 Header 不同 Payload 可以加密
Signature
- 对 Header 和 Payload 部分进行签名
- 保证 Token 在传输的过程中没有被篡改或者损坏
认证流程
- 客户端登录时传用户名、密码
- 服务器拿到用户名和密码后根据算法,生成 token,返回给浏览器
- 客户端拿到 token 后,存在本地存储中,再请求时带着 token 请求(一般放在 http header 中)
- 服务器拿着传来的 token ,验证其身份,返回资源
PS:服务器可以在 paylload 设置过期时间,如果过期,可以让客户端重新发起验证
JWT 缺点
- 更多的空间占用