OAuth2 授权模式的前置流程详解
📌 OAuth2 授权模式的前置流程详解
1️⃣ 问题背景
OAuth2 本质上是一套授权协议,它解决的是: 第三方应用如何在不获取用户密码的前提下,安全地访问用户资源。
例如:
- 微信登录
- QQ登录
- GitHub登录
- Google登录
- 企业统一认证平台(SSO)
很多人只记住了:
实际上在这一切发生之前,还有一个非常重要的准备工作:
只有完成注册后,授权服务器才能识别这个应用是否合法。
2️⃣ 核心原理
OAuth2 中主要存在四个角色:
| 角色 | 说明 |
|---|---|
| Resource Owner | 资源拥有者(用户) |
| Client | 客户端(第三方应用) |
| Authorization Server | 授权服务器 |
| Resource Server | 资源服务器 |
而 OAuth2 的前置流程主要发生在:
此时用户甚至还没有参与进来。
3️⃣ 数据结构分析
客户端注册成功后,授权服务器通常会保存如下信息:
| 字段 | 说明 |
|---|---|
| client_id | 应用唯一标识 |
| client_secret | 应用密钥 |
| redirect_uri | 授权成功回调地址 |
| scope | 允许访问的资源范围 |
| grant_type | 支持的授权模式 |
| app_name | 应用名称 |
例如微信开放平台:
AppSecret:xxxxxxxxxxxxxxxx
例如 GitHub OAuth:
Client Secret:xyz789
4️⃣ 算法分析
为什么授权服务器一定要给客户端发放 ClientId 和 ClientSecret?
本质上是为了完成客户端身份认证。
授权服务器必须知道:
- 请求来自哪个应用
- 该应用是否合法
- 该应用是否被允许访问资源
- 授权码应该回调给谁
因此 OAuth2 在设计上采用了:
ClientSecret = 应用密码
后续客户端拿授权码换 Token 时:
三者缺一不可。
5️⃣ 执行流程
步骤一:客户端注册
第三方应用首先在授权服务器进行注册。
例如:
- 微信开放平台创建应用
- GitHub OAuth App创建
- 企业统一认证中心创建客户端
步骤二:配置回调地址
客户端需要提前告诉授权服务器:
授权服务器以后只能回调这个地址。
防止授权码被劫持。
步骤三:生成应用凭证
授权服务器生成:
ClientSecret
并保存到数据库。
步骤四:客户端保存凭证
客户端将凭证保存到配置中心或者配置文件。
client-id: xxx
client-secret: xxx
完整前置流程图
↓ 注册应用
授权服务器(Authorization Server)
↓
生成 ClientId
生成 ClientSecret
保存 RedirectURI
↓
返回给客户端
↓
客户端保存凭证
↓
正式进入 OAuth2 授权流程
6️⃣ 实际案例
微信登录
前置阶段:
- 开发者注册微信开放平台账号
- 创建网站应用
- 填写回调地址
- 微信生成 AppID
- 微信生成 AppSecret
此时:
| 角色 | 对应对象 |
|---|---|
| Client | 你的网站 |
| Authorization Server | 微信OAuth服务器 |
| Resource Server | 微信用户中心 |
| Resource Owner | 微信用户 |
企业SSO登录
前置阶段:
- 业务系统A注册客户端
- 统一认证中心生成ClientId
- 统一认证中心生成ClientSecret
- 配置回调地址
此时:
| 角色 | 对应对象 |
|---|---|
| Client | 订单系统 |
| Authorization Server | SSO认证中心 |
| Resource Server | 用户中心 |
| Resource Owner | 员工 |
7️⃣ 优缺点分析
优点
- 授权服务器能够识别合法客户端
- 支持多应用接入
- 支持权限控制
- 支持回调地址校验
- 提升OAuth2整体安全性
缺点
- 需要额外维护客户端信息
- 需要管理ClientSecret
- 回调地址配置复杂
- ClientSecret泄露存在安全风险
8️⃣ 面试常见问题
OAuth2授权开始之前要做什么?
客户端必须先在授权服务器注册应用,获得 ClientId 和 ClientSecret。
ClientId 和 ClientSecret 是谁发放的?
由授权服务器生成并发放。
为什么需要 ClientSecret?
用于验证客户端身份,防止伪造客户端换取 Token。
回调地址为什么要提前注册?
防止授权码被重定向到恶意网站,从而避免授权码劫持攻击。
用户什么时候参与进来?
客户端完成注册后,正式进入授权码模式流程时,用户才会被重定向到授权页面进行授权确认。
9️⃣ 总结
OAuth2授权模式正式开始之前一定存在客户端注册过程。
① Client向Authorization Server注册应用。
② Authorization Server生成ClientId与ClientSecret。
③ Client配置RedirectURI。
④ Authorization Server保存客户端信息。
⑤ Client保存凭证。
⑥ 随后才进入授权码模式中的获取Code、换取Token、访问资源流程。
因此 OAuth2 授权码模式实际上分为两个阶段:
前置注册阶段 → Client注册应用。
授权认证阶段 → 用户授权并获取Token。
相关文章
-
微信排行榜怎么设计?从单机到亿级用户排行榜架构实践
排行榜本质上属于实时计算系统,其核心目标是解决海量用户数据的排序、查询、更新和展示问题。随着用户规模从万级增长到亿级,仅依靠数据库排序已经无法满足性能要求,因此通常采用 Redis Sorted Set、缓存分层、异步计算、分库分表等技术实现高性能排行榜。
NEW个对象 2026-06-09
-
RBAC权限模型的前后端实现架构设计
在现代企业级系统中,权限控制是系统安全的核心模块之一。随着系统规模扩大,用户数量、角色类型以及业务接口不断增加,传统的“写死权限判断”方式已经无法满足扩展性要求。
NEW个对象 2026-06-08
-
面试官让我设计一个秒杀系统
秒杀系统需要解决哪些问题,这里列几个关键性的问题: 1、高并发的瞬时流量 2、库存扣减 3、重复下单 4、热点数据
NEW个对象 2024-10-07