Files
pdnode-account/demo-oauth-flow.md
Bret 66a901c676 v.0.2.0-beta
目前oauth已经可以正常使用
2025-07-29 17:20:26 -07:00

165 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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授权的安全性和用户体验的平衡。