165 lines
4.1 KiB
Markdown
165 lines
4.1 KiB
Markdown
# OAuth 2.0 授权流程演示
|
||
|
||
## 概述
|
||
|
||
本演示展示了完整的OAuth 2.0授权码流程,包括用户同意授权的步骤。
|
||
|
||
## 系统架构
|
||
|
||
```
|
||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||
│ 第三方应用 │ │ OAuth提供商 │ │ 用户 │
|
||
│ (Client App)│ │ (Your App) │ │ (User) │
|
||
└─────────────┘ └─────────────┘ └─────────────┘
|
||
```
|
||
|
||
## 完整流程演示
|
||
|
||
### 步骤 1: 启动服务
|
||
|
||
```bash
|
||
# 启动后端API服务
|
||
npm start
|
||
|
||
# 启动前端服务
|
||
npm run dev:frontend
|
||
```
|
||
|
||
### 步骤 2: 用户注册和登录
|
||
|
||
1. 访问 `http://localhost:3001`
|
||
2. 注册新用户或登录现有用户
|
||
3. 进入个人中心
|
||
|
||
### 步骤 3: 创建OAuth客户端
|
||
|
||
1. 在个人中心点击"创建OAuth客户端"
|
||
2. 填写应用信息:
|
||
- 应用名称:测试应用
|
||
- 应用描述:这是一个测试OAuth流程的应用
|
||
- 重定向URI:`http://localhost:3001/third-party-app.html`
|
||
3. 创建客户端并记录客户端ID和密钥
|
||
|
||
### 步骤 4: 使用第三方应用示例
|
||
|
||
1. 打开第三方应用示例:`http://localhost:3001/third-party-app.html`
|
||
2. 填入刚才创建的客户端ID和密钥
|
||
3. 点击"开始OAuth授权"按钮
|
||
|
||
### 步骤 5: 授权流程
|
||
|
||
1. 系统重定向到授权页面:`http://localhost:3001/oauth/authorize`
|
||
2. 用户看到应用信息和请求的权限
|
||
3. 用户选择"同意授权"或"拒绝授权"
|
||
|
||
### 步骤 6: 获取访问令牌
|
||
|
||
1. 如果用户同意授权,系统会重定向回第三方应用
|
||
2. 第三方应用使用授权码交换访问令牌
|
||
3. 使用访问令牌获取用户信息
|
||
|
||
## API 端点说明
|
||
|
||
### 1. 获取授权信息
|
||
```
|
||
GET /api/oauth/authorize
|
||
```
|
||
- 验证OAuth请求参数
|
||
- 返回应用信息和请求的权限
|
||
- 不直接生成授权码
|
||
|
||
### 2. 用户同意/拒绝授权
|
||
```
|
||
POST /api/oauth/authorize/consent
|
||
```
|
||
- 处理用户的授权决定
|
||
- 如果同意,生成授权码
|
||
- 如果拒绝,返回错误信息
|
||
|
||
### 3. 交换访问令牌
|
||
```
|
||
POST /api/oauth/token
|
||
```
|
||
- 使用授权码交换访问令牌
|
||
- 返回访问令牌和刷新令牌
|
||
|
||
### 4. 获取用户信息
|
||
```
|
||
GET /api/oauth/userinfo
|
||
```
|
||
- 使用访问令牌获取用户信息
|
||
|
||
## 安全特性
|
||
|
||
### 1. 用户同意机制
|
||
- ✅ 用户必须明确同意才能获得授权码
|
||
- ✅ 显示详细的应用信息和权限范围
|
||
- ✅ 用户可以拒绝授权
|
||
|
||
### 2. 令牌安全
|
||
- ✅ 访问令牌有过期时间
|
||
- ✅ 支持刷新令牌机制
|
||
- ✅ 令牌可以撤销
|
||
|
||
### 3. 客户端验证
|
||
- ✅ 验证客户端ID和密钥
|
||
- ✅ 验证重定向URI
|
||
- ✅ 防止重放攻击
|
||
|
||
## 测试方法
|
||
|
||
### 1. 自动化测试
|
||
```bash
|
||
npm run test:oauth-flow
|
||
```
|
||
|
||
### 2. 手动测试
|
||
1. 使用前端界面测试
|
||
2. 使用第三方应用示例测试
|
||
3. 使用curl命令测试
|
||
|
||
### 3. 错误测试
|
||
- 测试无效的客户端ID
|
||
- 测试无效的重定向URI
|
||
- 测试过期的授权码
|
||
- 测试用户拒绝授权
|
||
|
||
## 常见问题
|
||
|
||
### Q: 为什么需要用户同意?
|
||
A: 这是OAuth 2.0的核心安全特性,确保用户对第三方应用的授权是明确和可控的。
|
||
|
||
### Q: 授权码可以重复使用吗?
|
||
A: 不可以,授权码只能使用一次,使用后立即失效。
|
||
|
||
### Q: 访问令牌过期怎么办?
|
||
A: 使用刷新令牌获取新的访问令牌,无需用户重新授权。
|
||
|
||
### Q: 如何撤销授权?
|
||
A: 可以通过撤销刷新令牌来撤销授权,用户需要重新授权。
|
||
|
||
## 扩展功能
|
||
|
||
### 1. 权限范围管理
|
||
- 支持细粒度的权限控制
|
||
- 用户可以部分授权某些权限
|
||
|
||
### 2. 应用管理
|
||
- 用户可以查看和管理已授权的应用
|
||
- 支持撤销特定应用的授权
|
||
|
||
### 3. 审计日志
|
||
- 记录所有授权和撤销操作
|
||
- 提供安全审计功能
|
||
|
||
## 总结
|
||
|
||
这个OAuth 2.0实现提供了完整的授权码流程,包括:
|
||
|
||
1. ✅ 用户同意机制
|
||
2. ✅ 安全的令牌管理
|
||
3. ✅ 完整的API端点
|
||
4. ✅ 友好的用户界面
|
||
5. ✅ 详细的测试和文档
|
||
|
||
这确保了OAuth授权的安全性和用户体验的平衡。 |