暫無描述

liuq 3c05cb198d V2.3.1 新增组织备注 9 小時之前
backend 3c05cb198d V2.3.1 新增组织备注 9 小時之前
docs 3c05cb198d V2.3.1 新增组织备注 9 小時之前
frontend 3c05cb198d V2.3.1 新增组织备注 9 小時之前
sql 3c05cb198d V2.3.1 新增组织备注 9 小時之前
.dockerignore 15e1cf7c23 更新忽略文件 3 月之前
.gitignore 15e1cf7c23 更新忽略文件 3 月之前
README.md a62fb054f8 数据库变更指南 3 月之前
docker-compose.test.yml b966a6d54a 更新测试 1 月之前
docker-compose.wsl.yml 31aaa5bc56 oidc自动登录 1 月之前
docker-compose.yml 31aaa5bc56 oidc自动登录 1 月之前

README.md

统一认证平台 (UAP)

1. 项目简介

统一认证平台 (Unified Authentication Platform, UAP) 是一个企业级的身份管理系统,旨在解决多应用间的账号统一、认证标准化及新老系统融合问题。

核心能力:

  • 多协议支持:同时支持现代 OIDC (OpenID Connect) 协议和传统 API Ticket 认证。
  • 账号中心:以手机号为核心标识,支持密码登录和短信验证码登录。
  • 账号映射:解决老旧系统账号体系不一致问题,支持将统一手机号映射为特定系统的用户名、邮箱等。
  • 安全集成:内置图形验证码、短信验证码、操作审计、Webhook 通知等安全机制。
  • 开箱即用:提供完整的前后端界面和 Docker 容器化部署方案。

2. 技术栈

后端 (Backend)

  • 核心框架: FastAPI (Python 3.10+) - 高性能异步 Web 框架。
  • 数据库 ORM: SQLAlchemy (2.0+) - 强大的 ORM 工具。
  • 数据验证: Pydantic (2.0+) - 数据解析与验证。
  • 认证引擎: Ory Hydra - 经过认证的 OAuth2/OIDC 服务器。
  • 缓存/消息: Redis - 用于验证码存储、Session 管理和任务队列。
  • 验证码: captcha + Pillow - 本地生成图形验证码。
  • 短信服务: 阿里云 SMS (可扩展 Mock 模式)。
  • 任务调度: FastAPI BackgroundTasks (轻量级异步任务)。
  • 数据处理: Pandas - 用于 Excel 数据的导入导出处理。

前端 (Frontend)

  • 核心框架: Vue 3 (Composition API)。
  • 语言: TypeScript。
  • 构建工具: Vite - 极速开发环境。
  • UI 组件库: Element Plus - 企业级后台组件库。
  • 状态管理: Pinia。
  • 网络请求: Axios。

基础设施 (Infrastructure)

  • 容器化: Docker & Docker Compose。
  • Web 服务器: Nginx (反向代理与静态资源服务)。
  • 应用服务器: Uvicorn (ASGI)。
  • 数据库: MySQL 8.0。

3. 项目结构与文件说明

3.1 目录概览

Unified_Authentication_Platform/
├── sql/                  # 数据库迁移脚本 (Flyway)
├── backend/                  # 后端项目 (FastAPI)
│   ├── app/                  # 应用源码
│   │   ├── api/v1/           # API 接口层
│   │   │   ├── endpoints/    # 具体业务接口实现
│   │   │   │   ├── apps.py         # 应用管理 (增删改查, Secret重置)
│   │   │   │   ├── auth.py         # 平台登录认证 (JWT)
│   │   │   │   ├── backup.py       # 数据备份与恢复接口
│   │   │   │   ├── login_logs.py   # 登录日志查询
│   │   │   │   ├── logs.py         # 操作审计日志查询 (DB)
│   │   │   │   ├── oidc.py         # OIDC 协议集成 (Login/Consent Provider)
│   │   │   │   ├── open_api.py     # 开放接口 (短信发送, 改密) - 需签名
│   │   │   │   ├── simple_auth.py  # 简易 Ticket 认证 (登录, 验证, 换票)
│   │   │   │   ├── system_logs.py  # 系统运行日志 (文件流, WebSocket实时)
│   │   │   │   ├── users.py        # 用户管理 (管理员用)
│   │   │   │   └── utils.py        # 通用工具 (验证码图片生成)
│   │   │   ├── api.py        # 路由注册汇总
│   │   │   └── deps.py       # 依赖注入 (DB Session, Current User, Token)
│   │   ├── core/             # 核心配置
│   │   │   ├── config.py       # 环境变量加载 (.env)与全局配置
│   │   │   ├── security.py     # 密码哈希, JWT 生成与校验
│   │   │   ├── database.py     # SQLAlchemy 引擎与 SessionLocal
│   │   │   ├── scheduler.py    # 任务调度配置 (APScheduler/BackgroundTasks)
│   │   │   └── hydra_config.py # Ory Hydra 客户端配置
│   │   ├── models/           # SQLAlchemy 数据模型 (MySQL Tables)
│   │   │   ├── user.py         # 用户表 (Users)
│   │   │   ├── application.py  # 应用表 (Applications)
│   │   │   ├── mapping.py      # 账号映射表 (AppUserMappings)
│   │   │   ├── backup.py       # 备份记录表
│   │   │   ├── login_log.py    # 登录日志表
│   │   │   └── operation_log.py# 操作日志表
│   │   ├── schemas/          # Pydantic 数据模型 (Request/Response Validation)
│   │   │   ├── user.py         # 用户相关 Schema
│   │   │   ├── token.py        # Token 响应 Schema
│   │   │   ├── application.py  # 应用管理 Schema
│   │   │   ├── mapping.py      # 映射导入/查询 Schema
│   │   │   ├── simple_auth.py  # 简易认证参数 Schema
│   │   │   ├── backup.py       # 备份相关 Schema
│   │   │   ├── login_log.py    # 登录日志 Schema
│   │   │   └── operation_log.py# 操作日志 Schema
│   │   ├── services/         # 业务逻辑服务层 (解耦 Controller 与 Logic)
│   │   │   ├── backup_service.py   # 备份逻辑 (Zip打包, SQL导出)
│   │   │   ├── captcha_service.py  # 验证码生成与 Redis 校验
│   │   │   ├── hydra_service.py    # Hydra Admin API 封装
│   │   │   ├── mapping_service.py  # Excel 解析与批量导入逻辑
│   │   │   ├── signature_service.py# API 签名算法实现
│   │   │   ├── sms_service.py      # 短信发送 (阿里云/Mock)
│   │   │   ├── webhook_service.py  # 变更通知推送逻辑
│   │   │   ├── ticket_service.py   # Ticket 生成与验证逻辑
│   │   │   ├── log_service.py      # 操作日志记录服务
│   │   │   └── login_log_service.py# 登录日志记录服务
│   │   └── main.py           # FastAPI APP 入口, 中间件配置, 异常处理
│   ├── backups/              # 自动生成的数据库备份文件存储目录
│   ├── logs/                 # 后端运行日志目录
│   ├── scripts/              # 维护脚本 (如初始化管理员)
│   ├── Dockerfile            # 后端容器构建定义
│   └── requirements.txt      # Python 依赖包列表
│
├── frontend/                 # 前端项目 (Vue 3 + TS)
│   ├── public/               # 静态资源 (Logo, Favicon)
│   ├── src/
│   │   ├── api/              # 后端接口封装 (Axios)
│   │   │   ├── apps.ts         # 应用管理接口
│   │   │   ├── users.ts        # 用户管理接口
│   │   │   ├── oidc.ts         # OIDC 相关接口
│   │   │   ├── public.ts       # 公开接口 (验证码, 短信, 注册, 找回密码)
│   │   │   ├── mapping.ts      # 映射管理接口
│   │   │   ├── backup.ts       # 备份管理接口
│   │   │   ├── logs.ts         # 操作日志接口
│   │   │   └── login_logs.ts   # 登录日志接口
│   │   ├── components/       # 公共组件
│   │   │   └── PlatformIcon.vue # 平台图标组件
│   │   ├── data/             # 静态数据 (如更新日志)
│   │   ├── router/           # 路由定义 (Vue Router)
│   │   ├── store/            # 状态管理 (Pinia)
│   │   │   └── auth.ts         # 用户登录状态, 权限控制
│   │   ├── utils/            # 前端工具库
│   │   │   ├── request.ts      # Axios 拦截器 (Token 注入, 错误处理)
│   │   │   └── color.ts        # 颜色生成工具
│   │   ├── views/            # 页面视图组件
│   │   │   ├── admin/          # 管理员专区
│   │   │   │   ├── maintenance/  # 运维管理
│   │   │   │   │   ├── DataBackup.vue  # 数据备份与恢复
│   │   │   │   │   ├── LoginLogs.vue   # 登录日志审计
│   │   │   │   │   ├── SystemLogs.vue  # 系统运行日志
│   │   │   │   │   └── DataRestore.vue # 数据恢复弹窗
│   │   │   │   └── UserList.vue  # 全局用户管理
│   │   │   ├── apps/           # 应用相关
│   │   │   │   ├── AppList.vue     # 应用列表管理
│   │   │   │   └── MappingImport.vue # 账号映射导入向导
│   │   │   ├── Login.vue       # 统一登录页
│   │   │   ├── Register.vue    # 用户注册页
│   │   │   ├── Dashboard.vue   # 用户/管理员仪表盘
│   │   │   ├── Consent.vue     # OIDC 授权确认页
│   │   │   ├── PlatformLaunchpad.vue # 应用启动台
│   │   │   ├── MyMappings.vue  # 我的账号映射
│   │   │   ├── ResetPassword.vue # 重置密码页
│   │   │   ├── Changelog.vue   # 更新日志
│   │   │   ├── Help.vue        # 帮助中心
│   │   │   └── SetupAdmin.vue  # 初始化管理员页
│   │   ├── App.vue           # 根组件
│   │   └── main.ts           # 入口文件 (挂载 Vue, Pinia, Router)
│   ├── nginx.conf            # 前端 Nginx 配置 (反向代理, Gzip)
│   ├── Dockerfile            # 前端容器构建 (Multi-stage build)
│   ├── package.json          # Node.js 依赖与脚本
│   └── vite.config.ts        # Vite 构建配置
│
├── docker-compose.yml        # 容器编排 (Backend, Frontend, MySQL, Redis, Hydra)
└── .env                      # 环境变量配置文件 (不入库)

4. 核心模块说明

4.1 认证模块 (Auth)

  • OIDC 集成:
    • 集成 Ory Hydra,实现完整的 Authorization Code Flow。
    • 提供自定义的 Login Provider (/auth/login) 和 Consent Provider (/auth/consent) 页面及接口。
    • 支持 openid, offline, profile scopes。
  • 简易认证 (Simple Auth):
    • 为不支持 OIDC 的老旧系统提供基于 Ticket 的认证机制。
    • 流程:登录 -> 获取 Ticket -> 重定向 -> 验签换取用户信息。
  • 安全机制:
    • 图形验证码:防止暴力破解。
    • 短信验证码:用于敏感操作(注册、重置密码)。
    • 签名校验:开放 API (/api/v1/open/*) 强制要求 HMAC-SHA256 签名。

4.2 应用管理 (Applications)

  • 应用注册: 管理员可创建应用,分配 App IDApp Secret
  • 账号映射:
    • 定义应用特定的账号字段(如 mapped_key)。
    • 支持 Excel 批量导入映射关系。
    • 支持通过 Webhook 实时推送映射变更。

4.3 运维管理

  • 日志审计:
    • 登录日志 (LoginLogs):记录所有登录尝试及结果。
    • 操作日志 (SystemLogs):记录管理员的关键操作。
    • Webhook 日志:记录对下游系统的推送记录及响应。
  • 数据备份: 支持数据库的备份与恢复功能。

5. 环境配置 (.env)

项目配置主要通过环境变量管理。虽然开发环境有默认值,但生产环境建议通过 .env 文件覆盖:

变量名 说明 默认值/示例
MYSQL_SERVER MySQL 地址 localhost
MYSQL_USER MySQL 用户名 root
MYSQL_PASSWORD MySQL 密码 secret
MYSQL_DB 数据库名 uap_db
REDIS_HOST Redis 地址 localhost
SECRET_KEY JWT/加密密钥 change_me_...
SMS_PROVIDER 短信服务商 aliyunmock
ALIYUN_ACCESS_KEY_ID 阿里云 AK -
ALIYUN_ACCESS_KEY_SECRET 阿里云 SK -

6. 安装与运行

6.1 容器化部署 (推荐)

本项目支持一键启动:

# 构建并启动所有服务
docker-compose up -d --build

启动后可访问:

  • 前端页面: http://localhost:5173 (开发) 或 http://localhost (Nginx)
  • 后端 API 文档: http://localhost:8000/docs
  • Ory Hydra: http://localhost:4444

6.2 本地开发运行

后端:

cd backend
# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt
# 启动服务
uvicorn app.main:app --reload

前端:

cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev

6.3 数据库运维 (自动升级与恢复)

本项目集成了 FlywayBackup Sidecar,实现了企业级的数据库运维能力。

1. 自动升级数据库 (Flyway)

  • 原理: db-migration 容器启动时会自动比对 sql/ 目录下的脚本与数据库状态,自动执行增量更新。
  • 操作步骤:
    1. 在项目根目录的 sql/ 文件夹中创建 SQL 文件。
    2. 命名需遵循 Flyway 规范:V<版本号>__<描述>.sql (注意是双下划线)。
      • 示例: sql/V1__init_schema.sql, sql/V2__add_phone_field.sql
    3. 执行 docker-compose up -d。容器会自动检测并应用新的 SQL 变更。

2. 灾难恢复 (Disaster Recovery)

  • 自动备份: db-backup 容器每天凌晨 3:00 自动将数据库备份至 backups/ 目录 (保留7天)。
  • 手动恢复步骤: 假设需要从 backups/uap_db_xxxx.sql.gz 恢复数据:
  # 1. 停止应用服务,防止写入
  docker-compose stop

  # 2. 仅启动数据库
  docker-compose up -d mysql

  # 3. 执行恢复 (使用 Docker 临时容器执行导入,无需本地安装 MySQL 客户端)
  # 注意:替换下方文件名
  docker run --rm -i \
    --network container:uap_mysql \
    mysql:8.0 \
    sh -c 'exec mysql -h mysql -u root -proot_password uap_db' < <(gzip -dc ./backups/uap_db_xxxx.sql.gz)

  # 4. 恢复完成后重启所有服务
  docker-compose restart

7. 常见问题 (FAQ)

  • Q: 默认管理员账号是什么?

    • A: 如果执行了初始化脚本,通常为手机号 13800000001,密码 admin
  • Q: 验证码图片加载失败?

    • A: 检查 Redis 连接是否正常,以及字体文件是否存在(通常由 Pillow 自带)。
  • Q: 短信发送失败?

    • A: 检查 SMS_PROVIDER 配置。开发环境可设置为 mock,验证码将直接打印在后端日志中。

最后更新时间: 2026-01-09