OAuth2 完整解析:我实现了一个“小而全”的授权中心

3 阅读1分钟

很多工程师用 OAuth2 只是“照文档集成”,但不知道内部机制。
我之前为了整合公司内部多系统,手写了一个简化版的 OAuth2 授权中心,这篇文章把关键点整理出来。


一、OAuth2 四种授权模式

  • 授权码模式(最安全)
  • 简化模式
  • 密码模式(不推荐)
  • 客户端模式

大部分业务用“授权码模式”。


二、授权流程图

A:用户  
B:第三方客户端  
C:授权服务器  
D:资源服务器

流程:

AB → 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 本质上是:

授权——不是认证
凭证交换——不是登录逻辑

理解清楚后,集成与扩展都轻松很多。