1. OAuth 2.0 概述:诞生背景、核心思想与四种授权模式

1.1 诞生背景:为什么需要 OAuth 2.0?

在 OAuth 诞生之前,第三方应用获取用户资源(如社交头像、邮件联系人)的唯一方式是直接获取用户的账号密码。这种“密码共享”模式存在严重的安全隐患:

  • 密码泄露风险:第三方应用存储用户密码,一旦服务器被攻破,用户所有受保护资源全部暴露。
  • 权限不可控:第三方应用获得的是用户账号的完整权限,无法限制其只能访问特定资源。
  • 无法撤销:用户只能通过修改密码来收回第三方应用的访问权,但修改密码会导致所有其他应用同时失效。
  • 责任边界模糊:资源服务器无法区分请求是来自用户本人还是第三方应用,审计和追责困难。
核心痛点:传统 HTTP 基本认证(Basic Auth)和 API Key 模式无法解决“委托授权”场景下的安全与可撤销问题。OAuth 2.0 正是为解决这一委托授权难题而诞生的开放标准(RFC 6749)。

1.2 核心思想:授权与资源分离

OAuth 2.0 的核心设计理念是将“授权”与“资源访问”解耦。它引入了一个独立的授权服务器(Authorization Server),专门负责颁发和验证访问令牌(Access Token),而资源服务器(Resource Server)只负责验证令牌并返回资源。整个流程围绕四个角色展开:

角色 英文名称 职责说明
资源所有者 Resource Owner 拥有受保护资源的实体,通常是用户本人。决定是否授权第三方应用访问其资源。
客户端 Client 需要访问用户资源的第三方应用,如 Web 应用、移动 App、后端服务。
授权服务器 Authorization Server 负责验证资源所有者身份,并向客户端颁发访问令牌的核心组件。
资源服务器 Resource Server 托管受保护资源的服务器,通过验证访问令牌来决定是否返回资源。

OAuth 2.0 的核心思想可以概括为:客户端通过授权服务器获取令牌,再凭令牌向资源服务器请求资源,全程不接触用户密码。

OAuth 2.0 核心角色与交互流程 OAuth 2.0 核心角色与交互流程 资源所有者 (用户) 客户端 (第三方应用) 授权服务器 (颁发令牌) 资源服务器 (验证令牌) ① 授权请求 ② 请求令牌 ③ 返回令牌 ④ 携带令牌请求资源 ⑤ 返回资源 关键原则 • 用户密码不传递给客户端 • 令牌(Token)代替密码 • 令牌可设置作用域和有效期 • 令牌可单独撤销 • 授权与资源访问分离 • 支持多种授权模式 • 标准化协议(RFC 6749) • 广泛行业支持

1.3 四种授权模式简介

OAuth 2.0 定义了四种授权模式(Grant Types),以适应不同客户端类型和安全需求。每种模式在令牌获取流程、安全级别和适用场景上存在显著差异。

授权模式 英文名称 核心流程 典型场景 安全级别
授权码模式 Authorization Code 用户授权 → 授权码 → 令牌 Web 服务端应用(有后端) ★★★★★
隐式模式 Implicit 用户授权 → 直接返回令牌 纯前端 SPA(已不推荐) ★★★☆☆
密码模式 Resource Owner Password Credentials 用户提供密码 → 令牌 高度信任的第一方应用 ★★☆☆☆
客户端凭证模式 Client Credentials 客户端凭证 → 令牌 服务间通信、后端 API ★★★★☆
课程聚焦:本课程将重点深入讲解客户端凭证模式(Client Credentials Grant),这是服务端架构中最常用的机器对机器(M2M)授权方式,也是构建后端权限矩阵的基础。

1.4 授权模式对比与选择依据

选择哪种授权模式,主要取决于以下三个因素:

  1. 客户端类型:是否有能力安全存储客户端密钥(confidential client vs. public client)。
  2. 资源所有者交互:是否需要用户参与授权流程。
  3. 安全需求:令牌泄露的风险承受能力。
四种授权模式对比决策树 四种授权模式对比决策树 选择授权模式 有用户交互 无用户交互 用户参与授权 客户端凭证模式 有后端服务器 纯前端/无后端 授权码模式 隐式模式(已弃用) 高度信任的第一方 密码模式(谨慎使用) 本课程重点 客户端凭证模式是服务端 架构中 M2M 授权的标准方案

1.5 关键术语与概念澄清

术语 说明 常见误区
Access Token 访问令牌,客户端用于访问资源服务器的凭证 ≠ 用户密码,≠ Session ID
Refresh Token 刷新令牌,用于在 Access Token 过期后获取新的令牌 客户端凭证模式通常不颁发 Refresh Token
Scope 作用域,定义令牌允许访问的资源范围 不是权限矩阵,只是粗粒度的权限分组
Client ID / Secret 客户端标识和密钥,用于客户端身份认证 Client Secret 必须安全存储,不能泄露
Grant Type 授权类型,定义令牌获取的具体流程 不同 Grant Type 的安全假设完全不同
安全提醒:OAuth 2.0 本身只定义了授权框架,并不提供传输层安全。所有令牌交换必须在 HTTPS 下进行,否则令牌可能被中间人攻击截获。此外,客户端凭证模式中,Client Secret 的泄露等同于令牌泄露,务必使用环境变量或密钥管理服务(KMS)进行存储。

1.6 本章小结

  • OAuth 2.0 解决了密码共享带来的安全风险,实现了授权与资源访问的分离。
  • 核心四角色:资源所有者、客户端、授权服务器、资源服务器。
  • 四种授权模式各有适用场景,客户端凭证模式是服务间通信的首选。
  • 从下一章开始,我们将深入客户端凭证模式的技术细节,包括令牌请求、验证、权限矩阵集成以及安全最佳实践。