桶权限控制:OAuth2.0细粒度策略配置实战 - 第1节

1.1 OAuth 2.0 是什么

OAuth 2.0 是一个授权框架,它允许第三方应用在用户(资源所有者)授权的前提下,获取对用户存储在另一服务上的资源的有限访问权限,而无需暴露用户的长期凭证(如密码)。

该框架的核心思想是委托授权:用户将访问权限委托给一个客户端应用,客户端通过一个短期、作用域受限的令牌来访问资源,而不是直接使用用户的用户名和密码。

核心价值:OAuth 2.0 解决了“密码共享”的安全隐患,实现了访问权限的细粒度控制与可撤销性。

1.2 核心角色

OAuth 2.0 定义了四个核心角色,它们协同工作以完成授权流程:

角色 英文名称 职责描述 典型示例
资源所有者 Resource Owner 拥有受保护资源的实体,通常是最终用户。它授权客户端访问其资源。 使用登录第三方网站的用户
客户端 Client 代表资源所有者请求访问受保护资源的第三方应用。它需要获得授权才能获取令牌。 一个需要读取用户昵称的第三方游戏应用
授权服务器 Authorization Server 负责验证资源所有者身份并颁发授权码或访问令牌的服务器。它是整个授权流程的核心。 开放平台的授权服务
资源服务器 Resource Server 托管受保护用户资源的服务器。它接收并验证访问令牌,然后返回请求的资源。 的用户信息 API 服务器
角色关系:授权服务器和资源服务器在物理上可以是同一台服务器,但在逻辑上是两个独立的实体。授权服务器负责“发证”,资源服务器负责“验票”。

角色交互流程

下图展示了四个核心角色在标准授权码流程中的交互关系:

OAuth 2.0 核心角色交互图 资源所有者 (用户) 客户端 (第三方应用) 授权服务器 (令牌颁发) 资源服务器 (API 服务) 1. 授权请求 2. 请求授权码 3. 返回授权码 4. 换取令牌 5. 使用令牌访问资源

1.3 令牌与授权码的区别

在 OAuth 2.0 流程中,授权码和访问令牌是两个关键凭证,它们的作用、生命周期和安全级别截然不同。理解它们的区别是配置细粒度策略的基础。

对比维度 授权码 (Authorization Code) 访问令牌 (Access Token)
本质 一个临时凭证,代表资源所有者对客户端的授权许可。 一个用于访问受保护资源的凭证字符串。
用途 仅用于向授权服务器换取访问令牌。 直接用于向资源服务器请求用户数据。
生命周期 极短(通常几分钟),一次性使用。 相对较长(通常几小时到几天),可重复使用直至过期。
安全级别 高。通过后端服务器传递,不暴露给浏览器或用户代理。 中。可能存储在客户端(如浏览器本地存储),存在泄露风险。
可见性 对用户和浏览器不可见。 对客户端应用可见,可能被用户或浏览器插件捕获。
是否携带用户信息 否。仅是一个授权许可的引用。 是。通常包含用户标识、作用域、过期时间等声明(如 JWT)。
安全警示:授权码绝不能暴露在浏览器前端或移动端代码中。它必须通过安全的服务器到服务器通道进行交换。如果授权码被截获,攻击者可以冒充客户端换取令牌。

授权码流程中的凭证流转

下图展示了授权码和访问令牌在标准授权码流程中的具体流转位置:

授权码与访问令牌流转图 用户浏览器 客户端后端 授权服务器 资源服务器 授权码 授权码 + Client Secret 访问令牌 访问令牌
关键结论:授权码是“一次性兑换券”,访问令牌是“长期通行证”。在细粒度策略配置中,我们主要对访问令牌进行作用域、权限和过期时间的控制。