OAuth 2.0 授权框架实战:安全认证完全指南
OAuth 2.0 是行业标准的授权框架。本文深入讲解 OAuth 2.0 核心流程和实战集成。
🔄 四种授权模式
1. 授权码模式(Authorization Code)— 最常用
# 1. 用户授权
GET /authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI
# 2. 交换 token
POST /token
code=AUTHORIZATION_CODE&grant_type=authorization_code
2. 隐式模式(Implicit)— 已废弃
3. 密码模式(Password Credentials)
4. 客户端凭证模式(Client Credentials)
🔐 安全最佳实践
- 使用 PKCE(Proof Key for Code Exchange)防止授权码拦截
- 使用 state 参数防止 CSRF 攻击
- 短生命周期 Access Token + 长生命周期 Refresh Token
- 使用 HTTPS 加密所有通信
- 验证 redirect_uri 防止开放重定向
🚀 实战:集成 GitHub OAuth
// 1. 重定向到 GitHub 授权页面
app.get('/auth/github', (req, res) => {
res.redirect(`https://github.com/login/oauth/authorize?client_id=${CLIENT_ID}`)
})
// 2. 处理回调
app.get('/auth/github/callback', async (req, res) => {
const { code } = req.query
// 交换 access token
const tokenResponse = await axios.post('https://github.com/login/oauth/access_token', {
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
code
})
// 使用 access token 获取用户信息
const userResponse = await axios.get('https://api.github.com/user', {
headers: { Authorization: `token ${tokenResponse.data.access_token}` }
})
res.json(userResponse.data)
})
总结:OAuth 2.0 是现代应用授权的标准方案。理解四种授权模式、掌握安全最佳实践,能设计出安全可靠的认证系统。
本文整理自 OAuth 2.0 RFC 6749 及安全实战指南