{T}

JWT 与常见鉴权方式

理解鉴权/加密/HTTPS等核心概念

熟悉常见的鉴权方式(JWT、session)及优缺点

使用 JWT 方式开发登录鉴权模块,设计相应接口

鉴权方式

现代 Web 应用中,常见的鉴权方式包括 Session+Cookie、JWT(JSON Web Token)以及 OAuth

优点

  • 安全性高:会话信息存储在服务器端,攻击者无法直接获取用户的敏感信息
  • 简单易用:对于开发者来说,Session + Cookie 的实现相对简单,很多 Web 框架都提供了内置支持
  • 支持会话管理:服务器可以轻松地管理用户会话(如强制登出、会话过期等)

缺点

  • 扩展性差:由于会话信息存储在服务器端,当用户数量增多时,服务器需要维护大量的会话信息,可能导致性能瓶颈
  • 状态依赖:Session 依赖于服务器的状态,这对于分布式系统(如多台服务器或基于微服务的架构)来说,管理起来比较复杂
  • 需处理跨域问题:在跨域情况下,Cookie 的管理和安全性需要特别注意

Session + Cookie 适合中小型应用和不需要跨域的场景

JWT

优点

  • 无状态:JWT 是无状态的,所有信息都包含在Token中,服务器不需要存储会话信息,适合分布式系统
  • 扩展性好:由于不需要在服务器端存储会话信息,JWT 更适合大规模应用
  • 跨域支持:JWT 可以在不同域之间传递,适合单页应用和微服务架构

缺点

  • 安全性风险:如果Token被截获或泄露,攻击者可以伪造用户身份。需要妥善保护Token的传输和存储。
  • Token大小问题:JWT 通常比Session ID 要大,传输和存储时会消耗更多带宽和资源
  • 不可撤销:一旦签发,JWT 在有效期内不可撤销,除非实现复杂的黑名单机制

JWT 适合分布式系统和跨域应用,尤其是单页应用(SPA)和微服务架构

OAuth

优点

  • 第三方授权:OAuth 允许用户授权第三方应用访问其资源,而无需提供密码,增强了安全性和用户体验
  • 细粒度权限控制:可以为不同的应用或操作设置不同的权限,灵活性强
  • 广泛支持:被很多大型平台(如Google、Facebook、GitHub等)采用,标准化程度高

缺点

  • 实现复杂:OAuth 的实现相对于Session+Cookie 和JWT 要复杂,需要处理授权码、令牌刷新等机制
  • 安全性挑战:虽然OAuth 提供了高级的安全特性,但如果实现不当,可能带来新的安全风险(如重定向攻击)
  • 依赖第三方:在某些情况下,需要依赖第三方的服务和API,这可能带来额外的延迟和不确定性

OAuth 适合需要第三方授权的大型应用,尤其是需要细粒度权限控制和提升安全性的场景

提高 JWT 安全性的策略

使用 HTTPS

服务端存储 Secret、动态 Secret

设置短期的 Token 有效,设置刷新 Token