1. OAuth2.0 授权链路全景:四种授权模式与网络交互节点
OAuth2.0 的核心是委托授权:资源所有者(用户)允许第三方应用(客户端)在限定范围内访问其受保护资源,而无需向客户端暴露长期凭证。四种授权模式分别适用于不同的客户端类型与安全场景,其网络交互节点与连接池压力分布也截然不同。
1.1 授权码模式(Authorization Code)
最安全、最常用的模式,适用于有后端服务器的机密客户端(如 Web 应用、移动 App 后端)。核心流程包含两次凭证交换:
- 用户代理 → 授权端点:客户端引导用户访问授权服务器,用户认证并授权。
- 授权端点 → 用户代理:授权服务器返回授权码(Authorization Code)到回调 URI。
- 客户端 → 令牌端点:客户端后端使用授权码 + Client Secret 换取 Access Token。
- 令牌端点 → 客户端:返回 Access Token(及可选的 Refresh Token)。
- 客户端 → 资源服务器:携带 Access Token 请求受保护资源。
连接池关键节点:令牌端点(高并发凭证交换)、资源服务器(高频资源读取)。授权码模式在令牌端点产生写密集型请求(创建 Token),在资源服务器产生读密集型请求(验证 Token)。
1.2 客户端模式(Client Credentials)
适用于服务器到服务器的通信,无用户参与。客户端直接使用自身凭证向令牌端点请求 Token,流程最短:
- 客户端 → 令牌端点:携带 client_id + client_secret 请求 Token。
- 令牌端点 → 客户端:返回 Access Token。
- 客户端 → 资源服务器:携带 Token 调用 API。
连接池特征:令牌端点请求量由后台任务频率决定,通常为周期性突发。资源服务器请求量取决于业务调用量,连接池需配置较高的最大连接数以应对突发。
1.3 密码模式(Resource Owner Password Credentials)
用户直接向客户端提供用户名/密码,客户端用此凭证向令牌端点换取 Token。仅适用于高度信任的客户端(如官方第一方应用)。
| 步骤 | 交互节点 | 连接池影响 |
|---|---|---|
| 1. 用户提交凭证 | 客户端 → 令牌端点 | 令牌端点接收明文密码,需限流防暴力破解 |
| 2. 返回 Token | 令牌端点 → 客户端 | 响应体包含 Token,连接池需快速释放 |
| 3. 访问资源 | 客户端 → 资源服务器 | 与授权码模式相同,读密集型 |
安全风险:密码模式会暴露用户凭证给客户端,且不支持 Refresh Token 轮换。OAuth2.0 安全最佳实践(BCP)已不推荐使用此模式。连接池层面需额外配置熔断阈值,防止凭证泄露后的恶意重放。
1.4 隐式模式(Implicit)
最初为纯前端应用(如浏览器 SPA)设计,令牌直接通过 URL 片段返回,不经过客户端后端。由于安全缺陷(令牌泄露、无 Refresh Token),已被 OAuth2.1 废弃。
- 用户代理 → 授权端点:客户端引导用户授权。
- 授权端点 → 用户代理:直接返回 Access Token(URL 片段)。
- 用户代理 → 资源服务器:前端携带 Token 调用 API。
连接池特殊性:隐式模式中,客户端后端不参与令牌交换,因此令牌端点与资源服务器的连接池压力完全由前端流量决定。现代架构已改用授权码模式 + PKCE 替代。
1.5 四种模式对比与网络节点总结
| 模式 | 客户端类型 | 令牌端点交互 | 资源服务器交互 | 连接池压力特征 |
|---|---|---|---|---|
| 授权码 | 机密客户端 | 2 次(授权码+Token) | 高频读取 | 令牌端点写密集,资源服务器读密集 |
| 客户端 | 机密客户端 | 1 次(直接换Token) | 高频读取 | 令牌端点周期性突发,资源服务器持续高负载 |
| 密码 | 机密客户端 | 1 次(凭证换Token) | 高频读取 | 令牌端点需限流防爆破,资源服务器读密集 |
| 隐式 | 公开客户端 | 0 次(前端直连) | 高频读取 | 令牌端点无压力,资源服务器承受全部前端流量 |
1.6 网络交互节点与连接池调优切入点
从全景图可见,OAuth2.0 授权链路涉及三个核心网络节点:
- 授权端点:处理用户认证与授权,通常承载重定向流量,连接池需配置短连接 + 快速超时。
- 令牌端点:处理凭证交换,是高并发写节点,连接池需预热 + 限流,防止被突发请求打满。
- 资源服务器:验证 Token 并返回资源,是高并发读节点,连接池需复用 + 熔断,避免因 Token 验证失败导致级联故障。
课程预告:后续章节将深入每个节点的连接池参数配置(maxTotal、maxIdle、minIdle、timeBetweenEvictionRunsMillis),以及如何与熔断器(Hystrix/Resilience4j)协同,构建高可用的 OAuth2.0 授权链路。