很多工程师用 OAuth2 只是“照文档集成”,但不知道内部机制。
我之前为了整合公司内部多系统,手写了一个简化版的 OAuth2 授权中心,这篇文章把关键点整理出来。
一、OAuth2 四种授权模式
- 授权码模式(最安全)
- 简化模式
- 密码模式(不推荐)
- 客户端模式
大部分业务用“授权码模式”。
二、授权流程图
A:用户
B:第三方客户端
C:授权服务器
D:资源服务器
流程:
A → B → C(同意授权)
C → B(授权码)
B → C(用授权码换 token)
B → D(携带 token 访问资源)
三、关键接口设计
1. 获取授权码
GET /oauth/authorize?client_id=xxx&redirect_uri=xxx&response_type=code
2. 换取 Token
POST /oauth/token
{
"grant_type": "authorization_code",
"code": "...",
"client_id": "...",
"client_secret": "..."
}
3. Token 验证
GET /oauth/check?token=xxx
四、Access Token vs Refresh Token
Access Token:
- 有效期短(如 2 小时)
Refresh Token:
- 用于刷新 Access Token
- 有效期(7~30 天)
- 不可用于访问资源
五、安全细节
- redirect_uri 必须严格校验
- code 必须一次性使用
- Token 存储必须可撤销
- 建议使用 JWT + Redis Blacklist
六、总结
OAuth2 本质上是:
授权——不是认证
凭证交换——不是登录逻辑
理解清楚后,集成与扩展都轻松很多。