标准答案
- Session 由浏览器 Cookie 或其他会话标识关联服务端状态,撤销、踢下线和权限即时变更直观,适合传统 Web 登录态。
- JWT 可由资源服务离线校验签名,减少中心会话查询,适合多服务验证和短生命周期访问令牌;令牌内容对持有者可见,不能存放敏感信息。
- Opaque Token 本身不包含业务声明,资源服务通过会话存储或令牌内省查询状态,便于撤销和集中控制。
- 不论哪种模型,都需要 TLS、安全存储、过期策略、轮换、注销、设备管理和服务端授权校验。
- 浏览器 Cookie 模型还要设计 SameSite、HttpOnly、Secure 和 CSRF 防护;移动端和服务端调用则要考虑令牌存储和泄露面。
题目解析
登录态模型不是“无状态一定更好”。高风险权限和即时撤销需求强时,服务端状态通常更容易治理。
认证成功后的身份信息不能替代每次请求的授权判断。角色变化、资源归属和租户范围仍需要服务端实时或可控地校验。
常见误区
- 把 JWT 当作加密保险箱,在 payload 中保存密码、身份证号或敏感权限细节。
- 认为 Session 只能单机使用,忽略共享存储或粘性会话方案。
- 只验证令牌签名,不检查过期、发行方、受众和权限变化。