317 lines
8.6 KiB
Markdown
317 lines
8.6 KiB
Markdown
# 风铃认证中心 - 管理端开发完成
|
||
|
||
## 项目概述
|
||
|
||
本项目为风铃认证中心提供完整的 Web 管理界面和后端 API。
|
||
|
||
## 技术栈
|
||
|
||
### 前端
|
||
- Vue 3 + TypeScript
|
||
- Vite
|
||
- Element Plus UI 框架
|
||
- Pinia 状态管理
|
||
- Vue Router 路由
|
||
- Axios HTTP 客户端
|
||
|
||
### 后端
|
||
- ASP.NET Core 10.0
|
||
- Entity Framework Core 10.0
|
||
- PostgreSQL 数据库
|
||
- OpenIddict OAuth2/OIDC 服务
|
||
- Serilog 日志
|
||
- OpenTelemetry 可观测性
|
||
|
||
## 完成的功能
|
||
|
||
### 前端页面
|
||
|
||
#### 1. 仪表盘(Dashboard)
|
||
- 统计卡片:用户数、租户数、OAuth应用数、今日访问
|
||
- 最近活动时间线
|
||
- 系统信息展示
|
||
- 位置:`src/views/Dashboard/Dashboard.vue`
|
||
|
||
#### 2. 用户管理
|
||
- 用户列表(分页、搜索)
|
||
- 添加/编辑用户
|
||
- 角色分配
|
||
- 重置密码
|
||
- 删除用户
|
||
- 位置:`src/views/Users/UserList.vue`
|
||
|
||
#### 3. 角色管理
|
||
- 角色列表(分页、搜索)
|
||
- 添加/编辑角色
|
||
- 权限配置
|
||
- 查看角色用户
|
||
- 移除用户角色
|
||
- 位置:`src/views/Users/RoleList.vue`
|
||
|
||
#### 4. 租户管理
|
||
- 租户列表(分页、搜索)
|
||
- 添加/编辑租户
|
||
- 租户设置(注册限制、密码策略、会话超时)
|
||
- 查看租户用户和角色
|
||
- 位置:`src/views/Users/TenantList.vue`
|
||
|
||
#### 5. OAuth 应用管理
|
||
- 应用列表(分页、搜索)
|
||
- 添加/编辑应用
|
||
- 完整配置(重定向URI、授权类型、权限范围等)
|
||
- 查看密钥
|
||
- 位置:`src/views/OAuth/ClientList.vue`
|
||
|
||
#### 6. 访问日志
|
||
- 日志列表(多条件筛选)
|
||
- 日志详情查看
|
||
- 导出 CSV
|
||
- 位置:`src/views/Audit/AccessLog.vue`
|
||
|
||
#### 7. 审计日志
|
||
- 日志列表(多条件筛选)
|
||
- 日志详情查看(包含变更前/后数据)
|
||
- 导出 CSV
|
||
- 位置:`src/views/Audit/AuditLog.vue`
|
||
|
||
### 后端 API
|
||
|
||
#### 控制器
|
||
|
||
1. **AuthController** - 认证端点
|
||
- POST /connect/token - 登录(密码模式)
|
||
- POST /connect/token/refresh - 刷新令牌
|
||
- POST /connect/revoke - 撤销令牌
|
||
|
||
2. **UsersController** - 用户管理
|
||
- GET /api/users - 获取用户列表(分页、搜索)
|
||
- GET /api/users/{id} - 获取单个用户
|
||
- POST /api/users - 创建用户
|
||
- PUT /api/users/{id} - 更新用户
|
||
- PUT /api/users/{id}/password - 重置密码
|
||
- DELETE /api/users/{id} - 删除用户
|
||
|
||
3. **RolesController** - 角色管理
|
||
- GET /api/roles - 获取角色列表(分页、搜索)
|
||
- GET /api/roles/{id} - 获取单个角色
|
||
- GET /api/roles/{id}/users - 获取角色用户
|
||
- POST /api/roles - 创建角色
|
||
- PUT /api/roles/{id} - 更新角色
|
||
- DELETE /api/roles/{id} - 删除角色
|
||
- DELETE /api/roles/{id}/users/{userId} - 移除用户角色
|
||
|
||
4. **TenantsController** - 租户管理
|
||
- GET /api/tenants - 获取租户列表(分页、搜索)
|
||
- GET /api/tenants/{id} - 获取单个租户
|
||
- GET /api/tenants/{tenantId}/users - 获取租户用户
|
||
- GET /api/tenants/{tenantId}/roles - 获取租户角色
|
||
- GET /api/tenants/{tenantId}/settings - 获取租户设置
|
||
- PUT /api/tenants/{tenantId}/settings - 更新租户设置
|
||
- POST /api/tenants - 创建租户
|
||
- PUT /api/tenants/{id} - 更新租户
|
||
- DELETE /api/tenants/{id} - 删除租户
|
||
|
||
5. **OAuthClientsController** - OAuth 应用管理
|
||
- GET /api/oauthclients - 获取应用列表(分页、搜索)
|
||
- GET /api/oauthclients/{id} - 获取单个应用
|
||
- GET /api/oauthclients/{id}/secret - 获取应用密钥
|
||
- POST /api/oauthclients - 创建应用
|
||
- PUT /api/oauthclients/{id} - 更新应用
|
||
- DELETE /api/oauthclients/{id} - 删除应用
|
||
|
||
6. **AccessLogsController** - 访问日志
|
||
- GET /api/access-logs - 获取日志列表(分页、筛选)
|
||
- GET /api/access-logs/export - 导出 CSV
|
||
|
||
7. **AuditLogsController** - 审计日志
|
||
- GET /api/audit-logs - 获取日志列表(分页、筛选)
|
||
- GET /api/audit-logs/export - 导出 CSV
|
||
|
||
8. **StatsController** - 统计数据
|
||
- GET /api/stats/dashboard - 仪表盘统计数据
|
||
- GET /api/stats/system - 系统统计信息
|
||
|
||
9. **HealthCheckController** - 健康检查
|
||
- GET /health - 健康检查端点
|
||
|
||
### 数据模型
|
||
|
||
#### 核心模型
|
||
|
||
1. **ApplicationUser** - 用户
|
||
- 继承自 IdentityUser<long>
|
||
- RealName, Phone, TenantId, CreatedTime, UpdatedTime, IsDeleted
|
||
|
||
2. **ApplicationRole** - 角色
|
||
- 继承自 IdentityRole<long>
|
||
- Description, DisplayName, TenantId, IsSystem, Permissions, CreatedTime
|
||
|
||
3. **Tenant** - 租户
|
||
- Id, TenantId, Name, ContactName, ContactEmail, ContactPhone
|
||
- MaxUsers, Description, Status, ExpiresAt, CreatedAt, UpdatedAt, IsDeleted
|
||
|
||
4. **OAuthApplication** - OAuth 应用
|
||
- Id, ClientId, ClientSecret, DisplayName
|
||
- RedirectUris, PostLogoutRedirectUris, Scopes, GrantTypes
|
||
- ClientType, ConsentType, Status, Description, CreatedAt, UpdatedAt
|
||
|
||
5. **AccessLog** - 访问日志
|
||
- UserName, TenantId, Action, Resource, Method, IpAddress
|
||
- UserAgent, Status, Duration, RequestData, ResponseData, ErrorMessage
|
||
- CreatedAt
|
||
|
||
6. **AuditLog** - 审计日志
|
||
- Operator, TenantId, Operation, Action
|
||
- TargetType, TargetId, TargetName, IpAddress, Description
|
||
- OldValue, NewValue, ErrorMessage, Status, CreatedAt
|
||
|
||
### 数据库配置
|
||
|
||
- **数据库类型**: PostgreSQL
|
||
- **连接字符串**: `Host=192.168.100.10;Port=5432;Database=fengling_auth;Username=movingsam;Password=sl52788542`
|
||
- **迁移**:
|
||
- InitialCreate - 初始化表结构
|
||
- AddOAuthApplications - 添加 OAuth 应用表
|
||
- AddTenantAndLogs - 添加租户和日志表
|
||
- AddOAuthDescription - 添加 OAuth 描述字段
|
||
|
||
### 初始数据
|
||
|
||
SeedData 初始化以下数据:
|
||
|
||
#### 默认租户
|
||
- TenantId: default
|
||
- Name: 默认租户
|
||
- MaxUsers: 1000
|
||
|
||
#### 系统角色
|
||
1. **Admin** - 管理员
|
||
- 所有权限
|
||
- IsSystem: true
|
||
|
||
2. **User** - 普通用户
|
||
- user.view 权限
|
||
- IsSystem: true
|
||
|
||
#### 默认用户
|
||
1. **admin**
|
||
- 密码: Admin@123
|
||
- 角色: Admin
|
||
|
||
2. **testuser**
|
||
- 密码: Test@123
|
||
- 角色: User
|
||
|
||
#### OAuth 应用
|
||
- **fengling-console** - 风铃运管中心
|
||
- ClientSecret: console-secret-change-in-production
|
||
- 授权类型: authorization_code, refresh_token
|
||
|
||
## 运行说明
|
||
|
||
### 后端(AuthService)
|
||
|
||
```bash
|
||
cd src/Fengling.AuthService
|
||
dotnet build
|
||
dotnet run
|
||
```
|
||
|
||
服务地址: http://localhost:5000
|
||
API 文档: http://localhost:5000/swagger
|
||
健康检查: http://localhost:5000/health
|
||
|
||
### 前端(Console.Web)
|
||
|
||
```bash
|
||
cd src/Fengling.Console.Web
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
开发地址: http://localhost:5173
|
||
|
||
生产构建:
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
## API 代理配置
|
||
|
||
Vite 开发服务器配置了 API 代理:
|
||
|
||
- `/api/auth/*` → `http://localhost:5000` (AuthService)
|
||
- `/api/gateway/*` → `http://localhost:5001` (YarpGateway)
|
||
|
||
## 默认登录
|
||
|
||
- 用户名: admin
|
||
- 密码: Admin@123
|
||
|
||
## 文件结构
|
||
|
||
```
|
||
Fengling.Refactory.Buiding/
|
||
├── src/
|
||
│ ├── Fengling.AuthService/ # 后端认证服务
|
||
│ │ ├── Controllers/ # API 控制器
|
||
│ │ ├── Data/ # 数据库上下文和种子数据
|
||
│ │ ├── Models/ # 数据模型
|
||
│ │ ├── Configuration/ # 配置类
|
||
│ │ └── Migrations/ # 数据库迁移
|
||
│ │
|
||
│ └── Fengling.Console.Web/ # 前端管理界面
|
||
│ ├── src/
|
||
│ │ ├── api/ # API 调用封装
|
||
│ │ ├── stores/ # Pinia 状态管理
|
||
│ │ ├── router/ # Vue Router 路由
|
||
│ │ └── views/ # 页面组件
|
||
│ │ ├── Auth/ # 认证页面
|
||
│ │ ├── Dashboard/ # 仪表盘
|
||
│ │ ├── Users/ # 用户/角色/租户管理
|
||
│ │ ├── OAuth/ # OAuth 应用管理
|
||
│ │ └── Audit/ # 日志管理
|
||
│ └── dist/ # 生产构建输出
|
||
│
|
||
└── docs/ # 项目文档
|
||
```
|
||
|
||
## 安全建议
|
||
|
||
1. **生产环境修改**:
|
||
- 更改默认管理员密码
|
||
- 修改 OAuth 应用密钥
|
||
- 配置 HTTPS
|
||
- 限制数据库访问
|
||
|
||
2. **密码策略**:
|
||
- 至少 8 位
|
||
- 包含字母和数字
|
||
- 可根据租户设置自定义策略
|
||
|
||
## 后续优化建议
|
||
|
||
1. **前端**:
|
||
- 添加更多图表可视化
|
||
- 实现前端国际化
|
||
- 添加单元测试
|
||
|
||
2. **后端**:
|
||
- 添加 API 限流
|
||
- 实现缓存策略
|
||
- 添加更多日志级别
|
||
- 完善错误处理
|
||
|
||
3. **功能**:
|
||
- OAuth 授权码流程完善
|
||
- 双因素认证(2FA)
|
||
- 用户自助服务(找回密码、注册)
|
||
- API 权限细粒度控制
|
||
|
||
## 版本信息
|
||
|
||
- 前端版本: v1.0.0
|
||
- 后端版本: v1.0.0
|
||
- .NET 版本: 10.0.2
|
||
- Node.js 版本: 推荐 18+
|