1. JWT 与 Session 的取舍
请说明 JWT(JSON Web Token)与基于 Session 的认证方案在分布式系统中的取舍,各自优缺点与适用场景?
- JWT 无状态与 Session 有状态的区别
- 分布式场景下的扩展性
- 撤销、安全性与存储的权衡
JWT 是无状态的,服务端把用户信息与签名封装在令牌中,验签即可信任,无需存储会话,天然适合分布式/微服务(每个服务都能独立验签,无需共享 Session 存储);Session 是有状态的,会话数据存服务端(内存或 Redis),客户端只持有 Session ID,需要共享存储支持多实例。JWT 优点:无状态、可跨域/跨服务、便于移动端与第三方集成;缺点:无法主动撤销(除非引入黑名单/缩短 TTL)、令牌可能泄露(一旦签发即有效)、载荷占用存储空间、以及密钥管理复杂。Session 优点:可主动吊销、可撤销、服务端可控;缺点:需要共享存储、有状态、难以横向扩展。取舍建议:对需要精确控制会话生命周期、可撤销的场景(如后台管理、敏感操作)倾向 Session;对高并发、无状态、跨服务认证的场景(如开放 API、微服务网关)倾向 JWT,并配合短 TTL 与 Refresh Token 缓解撤销问题。
本题考察"状态放哪"的设计权衡。核心是 JWT 无状态(可验签、难撤销)与 Session 有状态(可撤销、需存储)的对比,以及各自在分布式场景下的适用性。回答应结合业务场景给出取舍。