1. 认证与授权基础

1.1 核心概念:认证 vs 授权

在构建安全系统时,认证(Authentication)与授权(Authorization)是最容易被混淆的两个基础概念。它们虽然紧密关联,但职责完全不同。

维度 认证(Authentication) 授权(Authorization)
核心问题 你是谁? 你能做什么?
目的 验证用户身份的真实性 授予用户访问资源的权限
执行时机 先执行,通常在登录时完成 后执行,在认证通过后校验
凭证示例 用户名/密码、生物特征、OTP 访问令牌、角色、权限策略
常见协议 LDAP、SAML、OIDC OAuth 2.0、RBAC、ABAC
失败后果 无法进入系统 越权操作或数据泄露
实战口诀:认证是“验明正身”,授权是“划定权限”。在 JWT 契约校验中,sub(主题)声明用于认证,roles 或 permissions 声明用于授权。

1.2 常见认证模型对比

现代 Web 应用主要采用三种认证模型:Session 模型、Token 模型和OAuth 2.0 模型。每种模型在状态管理、扩展性和安全性上各有取舍。

1.2.1 Session 模型(有状态)

  • 工作原理:服务端生成 Session ID,存储在服务端内存或 Redis 中,客户端通过 Cookie 携带 Session ID。
  • 优点:实现简单,服务端可主动吊销会话。
  • 缺点:服务端需要维护会话状态,水平扩展时需共享 Session(如 Redis Session Store),不适合移动端和跨域场景。

1.2.2 Token 模型(无状态)

  • 工作原理:服务端签发一个自包含的 Token(如 JWT),客户端在后续请求中通过 HTTP Header 携带 Token。
  • 优点:服务端无需存储会话,天然支持水平扩展,适合移动端和跨域场景。
  • 缺点:Token 签发后无法直接吊销(需配合黑名单或短有效期),Token 体积较大。

1.2.3 OAuth 2.0 模型(授权委托)

  • 工作原理:资源所有者(用户)授权第三方应用获取有限访问权限,通过授权服务器颁发访问令牌。
  • 优点:解耦资源服务器与授权服务器,支持多种授权流程(授权码、客户端凭证等),是开放 API 的标准方案。
  • 缺点:协议复杂,需要理解多种 grant type,实现成本较高。
选型建议:单体应用或内部系统优先考虑 Session 模型;分布式微服务架构首选 Token 模型(JWT);开放 API 或第三方集成场景必须使用 OAuth 2.0。
三种认证模型架构对比 Session 模型(有状态) 客户端 服务端 Session 存储 Token 模型(无状态) 客户端 服务端 JWT 自包含 OAuth 2.0 模型(委托) 客户端 授权服务器 资源服务器 关键差异总结 • Session 模型:服务端存储会话,适合单体应用,扩展需共享存储。 • Token 模型(JWT):无状态、自包含,适合分布式微服务,但吊销困难。 • OAuth 2.0:授权委托协议,解耦资源与授权,适合开放 API 和第三方集成。

1.3 JWT 在认证授权中的角色

JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象形式安全传输信息。JWT 在认证授权体系中扮演着“契约载体”的核心角色。

1.3.1 JWT 的核心价值

  • 自包含(Self-contained):JWT 本身携带了用户身份、权限、有效期等所有必要信息,服务端无需查询数据库即可完成校验。
  • 防篡改(Tamper-proof):通过 HMAC 或 RSA/ECDSA 签名机制,任何对 JWT 内容的修改都会导致签名验证失败。
  • 跨域友好:JWT 基于 HTTP Header 传输,不受 Cookie 同源策略限制,天然支持跨域和移动端场景。
  • 标准化:JWT 结构(Header.Payload.Signature)被广泛支持,几乎所有编程语言都有成熟的 JWT 库。

1.3.2 JWT 在三种模型中的位置

模型 JWT 的角色 典型场景
Session 模型 可选替代方案,将 Session 数据编码为 JWT,减少服务端存储 无状态 Session、移动端适配
Token 模型 核心载体,作为访问令牌(Access Token)直接使用 微服务认证、单点登录(SSO)
OAuth 2.0 模型 访问令牌的推荐格式,也可用于 ID Token(OIDC) 开放 API 授权、第三方登录
⚠️ 常见误区:JWT 不是加密协议,它是签名协议。JWT 的 Payload 默认是 Base64 编码(非加密),任何人都可以解码读取。如果需要保护敏感数据,必须使用 JWE(JSON Web Encryption)或额外加密。
JWT 在认证授权体系中的位置 用户 客户端应用 认证服务器 资源服务器 登录请求 凭证提交 签发 JWT 携带 JWT 请求资源 JWT 契约结构(Header.Payload.Signature) Header 算法 & 类型 Payload 声明(Claims) Signature 防篡改签名 • Header 声明签名算法(如 HS256、RS256)和令牌类型(JWT)。 • Payload 包含认证声明(sub、iat、exp)和授权声明(roles、permissions)。 • Signature 使用密钥对 Header 和 Payload 进行签名,确保完整性。

1.4 本章小结

  • 认证与授权是安全体系的两大支柱:认证解决“你是谁”,授权解决“你能做什么”。
  • Session、Token、OAuth 2.0 三种模型各有适用场景,选择时需权衡状态管理、扩展性和安全性。
  • JWT 作为自包含的契约载体,在 Token 模型和 OAuth 2.0 模型中扮演核心角色,其签名机制保证了信息的完整性和防篡改性。
  • 在后续章节中,我们将深入 JWT 的契约校验细节,包括签名验证、声明校验、黑名单处理以及安全最佳实践。