首页 > 项目 > 当前页面

OAuth2 授权模式的前置流程详解

2026-06-13 NEW个对象

📌 OAuth2 授权模式的前置流程详解

核心结论:很多人学习 OAuth2 时直接研究授权码、AccessToken、RefreshToken,但实际上在授权流程开始之前,客户端必须先完成注册,拿到 ClientId 和 ClientSecret,否则整个授权流程根本无法启动。

1️⃣ 问题背景

OAuth2 本质上是一套授权协议,它解决的是: 第三方应用如何在不获取用户密码的前提下,安全地访问用户资源。

例如:

  • 微信登录
  • QQ登录
  • GitHub登录
  • Google登录
  • 企业统一认证平台(SSO)

很多人只记住了:

用户登录 → 获取授权码 → 获取Token → 获取用户信息

实际上在这一切发生之前,还有一个非常重要的准备工作:

客户端必须先向授权服务器注册。

只有完成注册后,授权服务器才能识别这个应用是否合法。


2️⃣ 核心原理

OAuth2 中主要存在四个角色:

角色 说明
Resource Owner 资源拥有者(用户)
Client 客户端(第三方应用)
Authorization Server 授权服务器
Resource Server 资源服务器

而 OAuth2 的前置流程主要发生在:

Client 与 Authorization Server 之间。

此时用户甚至还没有参与进来。


3️⃣ 数据结构分析

客户端注册成功后,授权服务器通常会保存如下信息:

字段 说明
client_id 应用唯一标识
client_secret 应用密钥
redirect_uri 授权成功回调地址
scope 允许访问的资源范围
grant_type 支持的授权模式
app_name 应用名称

例如微信开放平台:

AppID:wx123456789
AppSecret:xxxxxxxxxxxxxxxx

例如 GitHub OAuth:

Client ID:abc123
Client Secret:xyz789

4️⃣ 算法分析

为什么授权服务器一定要给客户端发放 ClientId 和 ClientSecret?

本质上是为了完成客户端身份认证。

授权服务器必须知道:

  • 请求来自哪个应用
  • 该应用是否合法
  • 该应用是否被允许访问资源
  • 授权码应该回调给谁

因此 OAuth2 在设计上采用了:

ClientId = 应用身份证

ClientSecret = 应用密码

后续客户端拿授权码换 Token 时:

client_id + client_secret + code

三者缺一不可。


5️⃣ 执行流程

步骤一:客户端注册

第三方应用首先在授权服务器进行注册。

例如:

  • 微信开放平台创建应用
  • GitHub OAuth App创建
  • 企业统一认证中心创建客户端

步骤二:配置回调地址

客户端需要提前告诉授权服务器:

https://www.xxx.com/oauth/callback

授权服务器以后只能回调这个地址。

防止授权码被劫持。

步骤三:生成应用凭证

授权服务器生成:

ClientId
ClientSecret

并保存到数据库。

步骤四:客户端保存凭证

客户端将凭证保存到配置中心或者配置文件。

application.yml
oauth:
  client-id: xxx
  client-secret: xxx

完整前置流程图

客户端(Client)
    ↓ 注册应用
授权服务器(Authorization Server)
    ↓
生成 ClientId
生成 ClientSecret
保存 RedirectURI
    ↓
返回给客户端
    ↓
客户端保存凭证
    ↓
正式进入 OAuth2 授权流程

6️⃣ 实际案例

微信登录

前置阶段:

  1. 开发者注册微信开放平台账号
  2. 创建网站应用
  3. 填写回调地址
  4. 微信生成 AppID
  5. 微信生成 AppSecret

此时:

角色 对应对象
Client 你的网站
Authorization Server 微信OAuth服务器
Resource Server 微信用户中心
Resource Owner 微信用户

企业SSO登录

前置阶段:

  1. 业务系统A注册客户端
  2. 统一认证中心生成ClientId
  3. 统一认证中心生成ClientSecret
  4. 配置回调地址

此时:

角色 对应对象
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

NEW个对象 NEW个对象
JAVA是世界上最好的语言