JWT 与常见鉴权方式
理解鉴权/加密/HTTPS等核心概念
熟悉常见的鉴权方式(JWT、session)及优缺点
使用 JWT 方式开发登录鉴权模块,设计相应接口
鉴权方式
现代 Web 应用中,常见的鉴权方式包括 Session+Cookie、JWT(JSON Web Token)以及 OAuth
Session + Cookie
优点
- 安全性高:会话信息存储在服务器端,攻击者无法直接获取用户的敏感信息
- 简单易用:对于开发者来说,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