This commit is contained in:
2025-07-29 15:36:25 -07:00
commit 0c481c7a0e
29 changed files with 6682 additions and 0 deletions

406
README.md Normal file
View File

@ -0,0 +1,406 @@
# OAuth 2.0 提供商服务
这是一个完整的OAuth 2.0提供商服务支持Authorization Code Flow包含用户认证、OAuth客户端管理、令牌管理等功能。
## 功能特性
### 🔐 用户认证
- 用户注册和登录
- JWT令牌认证
- 密码加密存储
### 🚀 OAuth 2.0 功能
- **Authorization Code Flow** - 完整的授权码流程
- **Access Token** - 访问令牌生成和验证
- **Refresh Token** - 刷新令牌支持
- **Token Revocation** - 令牌撤销功能
- **PKCE Support** - 支持PKCEProof Key for Code Exchange
- **Scope Management** - 权限范围管理
### 🛡️ 安全特性
- 客户端密钥管理
- 令牌过期机制
- 自动清理过期令牌
- 重定向URI验证
- 客户端所有权验证
### 📊 OAuth客户端管理
- 创建OAuth客户端
- 获取客户端列表
- 获取客户端详情
- 获取客户端密钥
- 重置客户端密钥
- 删除客户端
## API端点
### 用户认证
```
POST /api/auth/register - 用户注册
POST /api/auth/login - 用户登录
GET /api/auth/profile - 获取用户信息
```
### OAuth端点
```
GET /api/oauth/authorize - 授权端点
POST /api/oauth/token - 令牌端点
POST /api/oauth/revoke - 撤销端点
GET /api/oauth/userinfo - 用户信息端点
GET /api/oauth/tokeninfo - 令牌信息端点
```
### OAuth客户端管理
```
POST /api/oauth/clients - 创建客户端
GET /api/oauth/clients - 获取客户端列表
GET /api/oauth/clients/:clientId - 获取客户端详情
GET /api/oauth/clients/:clientId/secret - 获取客户端密钥
POST /api/oauth/clients/:clientId/reset-secret - 重置客户端密钥
DELETE /api/oauth/clients/:clientId - 删除客户端
```
### 发现端点
```
GET /.well-known/oauth-authorization-server - OAuth发现端点
```
## 安装和运行
### 1. 安装依赖
```bash
npm install
```
### 2. 配置环境变量
创建 `.env` 文件:
```env
DB_HOST=localhost
DB_PORT=5432
DB_NAME=your_database
DB_USER=your_username
DB_PASSWORD=your_password
JWT_SECRET=your_jwt_secret_key
PORT=3000
```
### 3. 启动服务
```bash
# 开发模式
npm run dev
# 生产模式
npm start
```
## 前端界面
本项目包含两个前端版本:
### 🚀 React + Material-UI 版本(推荐)
现代化的React应用使用Material-UI组件库。
#### 安装和运行
```bash
# 安装前端依赖
npm install
# 启动前端开发服务器
npm run dev:frontend
# 构建生产版本
npm run build:frontend
```
#### 功能特性
-**响应式设计** - 适配各种屏幕尺寸
-**现代化UI** - Material-UI设计语言
-**路由管理** - React Router
-**状态管理** - Context API
-**表单验证** - 实时验证和错误提示
-**加载状态** - 优雅的加载动画
-**错误处理** - 友好的错误提示
#### 页面说明
1. **登录页面** (`/login`)
- 用户名/密码登录
- 密码可见性切换
- 表单验证
- 自动跳转到注册
2. **注册页面** (`/register`)
- 用户注册表单
- 密码确认验证
- 邮箱格式验证
- 自动跳转到登录
3. **个人中心** (`/dashboard`)
- 用户信息展示
- OAuth客户端管理
- 创建/删除客户端
- 退出登录
4. **OAuth授权页面** (`/oauth/authorize`)
- 第三方应用授权
- 权限范围展示
- 用户信息确认
- 授权/拒绝操作
### 📄 HTML + Bootstrap 版本
简单的HTML版本使用Bootstrap样式。
#### 使用方法
```bash
# 直接打开HTML文件
open public/index.html
```
#### 功能特性
-**轻量级** - 无需构建工具
-**Bootstrap样式** - 美观的界面
-**原生JavaScript** - 简单易懂
-**登录/注册切换** - 单页面应用
-**表单验证** - 客户端验证
## 使用示例
### 1. 启动后端服务
```bash
# 启动后端API服务
npm start
```
### 2. 启动前端服务
```bash
# 启动React前端
npm run dev:frontend
```
### 3. 访问应用
- **React版本**: http://localhost:3001
- **HTML版本**: 直接打开 `public/index.html`
### 4. 测试OAuth流程
1. 注册/登录用户
2. 在个人中心创建OAuth客户端
3. 访问授权页面:`http://localhost:3001/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=http://localhost:3001/callback&scope=read%20write&state=test123`
4. 完成授权流程
## 前端技术栈
### React版本
- **React 18** - 用户界面库
- **Material-UI 5** - 组件库
- **React Router 6** - 路由管理
- **Axios** - HTTP客户端
- **Vite** - 构建工具
### HTML版本
- **Bootstrap 5** - CSS框架
- **Font Awesome** - 图标库
- **原生JavaScript** - 交互逻辑
## 开发说明
### 目录结构
```
├── src/ # React源代码
│ ├── components/ # 组件
│ ├── contexts/ # 上下文
│ ├── pages/ # 页面
│ ├── App.jsx # 主应用
│ └── main.jsx # 入口文件
├── public/ # 静态资源
│ └── index.html # HTML版本
├── index.html # React入口
├── vite.config.js # Vite配置
└── package.json # 项目配置
```
### 开发命令
```bash
# 开发模式
npm run dev:frontend
# 构建生产版本
npm run build:frontend
# 预览生产版本
npm run preview:frontend
```
### 环境配置
前端会自动代理API请求到后端
```javascript
// vite.config.js
server: {
port: 3001,
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true
}
}
}
```
## 安全特性
### 前端安全
-**JWT令牌管理** - 自动存储和刷新
-**路由保护** - 私有路由验证
-**表单验证** - 客户端和服务器端验证
-**错误处理** - 友好的错误提示
-**CORS配置** - 跨域请求处理
### 用户体验
-**响应式设计** - 移动端适配
-**加载状态** - 优雅的加载动画
-**错误提示** - 清晰的错误信息
-**表单验证** - 实时验证反馈
-**自动跳转** - 智能路由管理
## 数据库结构
### 用户表 (users)
```sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
### OAuth客户端表 (oauth_clients)
```sql
CREATE TABLE oauth_clients (
id SERIAL PRIMARY KEY,
client_id VARCHAR(100) UNIQUE NOT NULL,
client_secret VARCHAR(255) NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
redirect_uris TEXT[] NOT NULL,
scopes TEXT[] DEFAULT ARRAY['read', 'write'],
user_id INTEGER NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
### OAuth授权码表 (oauth_auth_codes)
```sql
CREATE TABLE oauth_auth_codes (
id SERIAL PRIMARY KEY,
code VARCHAR(255) UNIQUE NOT NULL,
client_id VARCHAR(100) NOT NULL,
user_id INTEGER NOT NULL,
redirect_uri VARCHAR(255) NOT NULL,
scopes TEXT[] NOT NULL,
expires_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
### OAuth访问令牌表 (oauth_access_tokens)
```sql
CREATE TABLE oauth_access_tokens (
id SERIAL PRIMARY KEY,
token VARCHAR(255) UNIQUE NOT NULL,
client_id VARCHAR(100) NOT NULL,
user_id INTEGER NOT NULL,
scopes TEXT[] NOT NULL,
expires_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
### OAuth刷新令牌表 (oauth_refresh_tokens)
```sql
CREATE TABLE oauth_refresh_tokens (
id SERIAL PRIMARY KEY,
token VARCHAR(255) UNIQUE NOT NULL,
access_token_id INTEGER REFERENCES oauth_access_tokens(id) ON DELETE CASCADE,
client_id VARCHAR(100) NOT NULL,
user_id INTEGER NOT NULL,
is_revoked BOOLEAN DEFAULT FALSE,
expires_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
## 安全特性
### 🔒 令牌安全
- 访问令牌有效期1小时
- 刷新令牌有效期30天
- 授权码有效期10分钟
- 自动清理过期令牌
### 🛡️ 客户端安全
- 客户端密钥加密存储
- 重定向URI验证
- 客户端所有权验证
- 支持客户端密钥重置
### 🔐 认证安全
- JWT令牌认证
- 密码bcrypt加密
- 输入验证和清理
- CORS配置
## 测试
### 运行OAuth测试
```bash
npm run test:oauth
```
### 运行基础API测试
```bash
npm run test
```
## 生产环境建议
### 1. 安全配置
- 使用强密码策略
- 启用HTTPS
- 配置CORS策略
- 设置适当的令牌过期时间
### 2. 性能优化
- 使用Redis缓存令牌
- 数据库连接池优化
- 定期清理过期数据
### 3. 监控和日志
- 添加请求日志
- 监控令牌使用情况
- 错误追踪和告警
### 4. 扩展功能
- 支持多种授权类型
- 添加OAuth客户端应用管理界面
- 实现OAuth 2.1标准
- 支持OpenID Connect
## 许可证
MIT License