2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00
2025-07-29 15:36:25 -07:00

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. 安装依赖

npm install

2. 配置环境变量

创建 .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. 启动服务

# 开发模式
npm run dev

# 生产模式
npm start

前端界面

本项目包含两个前端版本:

🚀 React + Material-UI 版本(推荐)

现代化的React应用使用Material-UI组件库。

安装和运行

# 安装前端依赖
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样式。

使用方法

# 直接打开HTML文件
open public/index.html

功能特性

  • 轻量级 - 无需构建工具
  • Bootstrap样式 - 美观的界面
  • 原生JavaScript - 简单易懂
  • 登录/注册切换 - 单页面应用
  • 表单验证 - 客户端验证

使用示例

1. 启动后端服务

# 启动后端API服务
npm start

2. 启动前端服务

# 启动React前端
npm run dev:frontend

3. 访问应用

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          # 项目配置

开发命令

# 开发模式
npm run dev:frontend

# 构建生产版本
npm run build:frontend

# 预览生产版本
npm run preview:frontend

环境配置

前端会自动代理API请求到后端

// vite.config.js
server: {
  port: 3001,
  proxy: {
    '/api': {
      target: 'http://localhost:3000',
      changeOrigin: true
    }
  }
}

安全特性

前端安全

  • JWT令牌管理 - 自动存储和刷新
  • 路由保护 - 私有路由验证
  • 表单验证 - 客户端和服务器端验证
  • 错误处理 - 友好的错误提示
  • CORS配置 - 跨域请求处理

用户体验

  • 响应式设计 - 移动端适配
  • 加载状态 - 优雅的加载动画
  • 错误提示 - 清晰的错误信息
  • 表单验证 - 实时验证反馈
  • 自动跳转 - 智能路由管理

数据库结构

用户表 (users)

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)

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)

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)

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)

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测试

npm run test:oauth

运行基础API测试

npm run test

生产环境建议

1. 安全配置

  • 使用强密码策略
  • 启用HTTPS
  • 配置CORS策略
  • 设置适当的令牌过期时间

2. 性能优化

  • 使用Redis缓存令牌
  • 数据库连接池优化
  • 定期清理过期数据

3. 监控和日志

  • 添加请求日志
  • 监控令牌使用情况
  • 错误追踪和告警

4. 扩展功能

  • 支持多种授权类型
  • 添加OAuth客户端应用管理界面
  • 实现OAuth 2.1标准
  • 支持OpenID Connect

许可证

MIT License

Description
Pdnode Account
Readme 198 KiB
Languages
JavaScript 79.3%
HTML 20.7%