diff --git a/docs/plans/fengling-console-plan.md b/docs/plans/fengling-console-plan.md index b9a0d17..cb344ef 100644 --- a/docs/plans/fengling-console-plan.md +++ b/docs/plans/fengling-console-plan.md @@ -2,43 +2,55 @@ ## 项目概述 -**项目名称**: Fengling.Console -**中文名称**: 风铃运管中心 -**定位**: 统一运维管理平台 +**项目名称**: Fengling.Console +**中文名称**: 风铃运管中心 +**定位**: 统一运维管理平台(前端Vue项目) -## 架构整合 +## 架构设计 -### 1. 后端整合 -- **原项目**: `src/YarpGateway/` (YARP Gateway) -- **整合到**: `src/Fengling.Console/` (新建) -- **新增功能**: OAuth Client管理 - -### 2. 前端整合 -- **原项目**: `src/YarpGateway.Admin/` (Vue 3 + Vite) -- **整合到**: `src/Fengling.Console.Web/` (新建) -- **功能扩展**: +### 前端(新建) +- **项目**: `src/Fengling.Console.Web/` (Vue 3 + Vite) +- **功能**: - 网关路由管理 - 租户管理 - OAuth Client管理 - - 用户管理(通过AuthService API) + - 用户管理 + - 集群实例管理 + +### 后端API(已有) +1. **Fengling.AuthService** - 认证服务 + - OAuth Client管理 API + - 用户管理 API + - Token 端点 + +2. **YarpGateway** - 网关服务 + - 租户管理 API + - 路由管理 API + - 集群实例管理 API ## 功能模块 -### 模块1: 网关管理 +### 模块1: 认证登录 +- OAuth2 授权码流登录 +- Token刷新机制 +- 登出功能 +- Client: fengling-console + +### 模块2: 网关管理 - 租户列表 - 租户路由配置 - 集群实例管理 - 全局路由配置 - 负载均衡策略 -### 模块2: OAuth Client管理 +### 模块3: OAuth Client管理 - Client ID/Secret管理 - 重定向URI配置 - 授权类型配置 - Scope配置 - Client状态管理 -### 模块3: 用户管理 +### 模块4: 用户管理 - 用户列表 - 用户角色分配 - 租户分配 @@ -47,12 +59,11 @@ ## 认证集成 ### Fengling.Console作为OAuth Client -需要在AuthService初始化时注册: +已在AuthService中预注册: -```csharp -// Client配置 +```yaml ClientId: "fengling-console" -ClientSecret: "console-secret-xxx" +ClientSecret: "console-secret-change-in-production" RedirectUris: ["http://console.fengling.local/auth/callback"] PostLogoutRedirectUris: ["http://console.fengling.local/"] Scopes: ["api", "offline_access"] @@ -63,95 +74,130 @@ GrantTypes: ["authorization_code", "refresh_token"] ``` src/ -├── Fengling.AuthService/ # 认证服务(已完成部分) -├── Fengling.Console/ # 运管中心后端(新建) +├── Fengling.AuthService/ # 认证服务(已完成) │ ├── Controllers/ -│ │ ├── Gateway/ # 网关管理 -│ │ ├── OAuth/ # OAuth Client管理 -│ │ └── Users/ # 用户管理代理 -│ ├── Services/ +│ │ ├── OAuthClientsController.cs # OAuth Client管理API +│ │ └── AuthController.cs # 认证API +│ ├── Models/ +│ │ ├── OAuthApplication.cs +│ │ ├── ApplicationUser.cs +│ │ └── ApplicationRole.cs │ └── Data/ -├── Fengling.Console.Web/ # 运管中心前端(新建) -│ ├── src/ -│ │ ├── views/ -│ │ │ ├── gateway/ # 网关管理 -│ │ │ ├── oauth/ # OAuth管理 -│ │ │ └── users/ # 用户管理 -│ │ └── components/ -│ └── YarpGateway.Admin/ # 原有代码迁移 -└── YarpGateway/ # 网关服务(保留) +│ ├── SeedData.cs # 预注册fengling-console +│ └── ApplicationDbContext.cs +├── YarpGateway/ # 网关服务(已有) +│ ├── Controllers/ +│ │ ├── GatewayConfigController.cs +│ │ ├── TenantController.cs +│ │ └── ClusterInstanceController.cs +│ ├── Models/ +│ │ ├── GwTenant.cs +│ │ ├── GwTenantRoute.cs +│ │ └── GwServiceInstance.cs +│ └── Data/ +│ └── GatewayDbContext.cs +└── Fengling.Console.Web/ # 运管中心前端(新建) + ├── src/ + │ ├── views/ + │ │ ├── Auth/ # 认证相关 + │ │ │ ├── Login.vue + │ │ │ └── Callback.vue + │ │ ├── Gateway/ # 网关管理 + │ │ │ ├── TenantList.vue + │ │ │ ├── TenantRoutes.vue + │ │ │ ├── ClusterInstances.vue + │ │ │ └── GlobalRoutes.vue + │ │ ├── OAuth/ # OAuth管理 + │ │ │ └── ClientList.vue + │ │ └── Users/ # 用户管理 + │ │ └── UserList.vue + │ ├── components/ + │ ├── api/ + │ │ ├── auth.ts # AuthService API + │ │ ├── gateway.ts # Gateway API + │ │ └── oauth.ts # OAuth API + │ ├── stores/ + │ │ ├── auth.ts + │ │ └── user.ts + │ └── router/ + │ └── index.ts + ├── package.json + └── vite.config.ts +``` + +## API调用关系 + +``` +Fengling.Console.Web (前端) + ├── OAuth2登录 → Fengling.AuthService (/connect/authorize) + ├── OAuth Client管理 → Fengling.AuthService (/api/oauthclients) + ├── 用户管理 → Fengling.AuthService (/api/users) + ├── 租户管理 → YarpGateway (/api/tenants) + ├── 路由管理 → YarpGateway (/api/routes) + └── 集群管理 → YarpGateway (/api/instances) ``` ## 技术栈 -### 后端 (Fengling.Console) -- .NET 10.0 -- ASP.NET Core Web API -- EF Core 10.0 -- PostgreSQL -- OpenTelemetry - ### 前端 (Fengling.Console.Web) - Vue 3 + TypeScript - Vite -- Element Plus -- Pinia +- Element Plus (UI组件库) +- Pinia (状态管理) - Vue Router +- Axios (HTTP客户端) + +### 后端API +- Fengling.AuthService: .NET 10.0, OpenIddict 7.2.0 +- YarpGateway: .NET 10.0, YARP 2.2.0 ## 实施计划 -### Phase 1: 认证服务扩展 -1. [ ] Task 5-9: 完成AuthService基础功能 -2. [ ] Task 10: 添加OAuth Client模型和管理 -3. [ ] Task 11: 预注册Fengling.Console作为Client +### Phase 1: 认证服务扩展(已完成) +- [x] Task 1-9: 完成AuthService基础功能 +- [x] Task 10: 添加OAuth Client模型和管理API +- [x] Task 11: 预注册Fengling.Console作为Client -### Phase 2: 运管中心后端 -1. [ ] Task 12: 创建Fengling.Console项目 -2. [ ] Task 13: 迁移网关管理功能 -3. [ ] Task 14: 添加OAuth Client管理API -4. [ ] Task 15: 添加用户管理代理API - -### Phase 3: 运管中心前端 -1. [ ] Task 16: 创建Fengling.Console.Web项目 -2. [ ] Task 17: 迁移YarpGateway.Admin代码 -3. [ ] Task 18: 添加OAuth管理界面 -4. [ ] Task 19: 集成OAuth认证登录 +### Phase 2: 运管中心前端(待开始) +- [ ] Task 12: 创建Fengling.Console.Web Vue项目 +- [ ] Task 13: 配置项目结构和依赖 +- [ ] Task 14: 实现OAuth2登录流程 +- [ ] Task 15: 实现网关管理界面(迁移YarpGateway.Admin) +- [ ] Task 16: 实现OAuth Client管理界面 +- [ ] Task 17: 实现用户管理界面 +- [ ] Task 18: 配置API封装(调用AuthService和YarpGateway) +- [ ] Task 19: 添加Dockerfile和部署配置 ## 依赖关系 ``` -Fengling.Console.Web - ↓ (OAuth 2.0) -Fengling.Console - ↓ (数据库) -PostgreSQL - ↓ (路由配置) -YarpGateway +Fengling.Console.Web (Vue前端) + ↓ (OAuth2) +Fengling.AuthService (认证API) + ↓ (JWT Token验证) +YarpGateway (网关API) ``` -## 数据库设计 +## 环境配置 -### OAuth Applications表 -```sql -CREATE TABLE oauth_applications ( - id BIGSERIAL PRIMARY KEY, - client_id VARCHAR(100) UNIQUE NOT NULL, - client_secret VARCHAR(200), - display_name VARCHAR(100), - redirect_uris TEXT[], - post_logout_redirect_uris TEXT[], - scopes TEXT[], - grant_types TEXT[], - client_type VARCHAR(20), - consent_type VARCHAR(20), - status VARCHAR(20), - created_at TIMESTAMP DEFAULT NOW() -); +### 开发环境 +```env +VITE_AUTH_SERVICE_URL=http://auth.fengling.local:5000 +VITE_GATEWAY_SERVICE_URL=http://gateway.fengling.local:5000 +VITE_CLIENT_ID=fengling-console +VITE_REDIRECT_URI=http://console.fengling.local:5173/auth/callback +``` + +### 生产环境 +```env +VITE_AUTH_SERVICE_URL=https://auth.fengling.local +VITE_GATEWAY_SERVICE_URL=https://gateway.fengling.local ``` ## 注意事项 -1. **向后兼容**: YarpGateway继续独立运行 -2. **渐进式迁移**: 先完成Console后端,再迁移前端 -3. **统一认证**: 所有管理界面通过AuthService OAuth登录 -4. **权限控制**: Console内部API也需要认证 +1. **无后端项目**: Fengling.Console是纯前端项目 +2. **直接调用现有API**: 复用AuthService和YarpGateway的API +3. **OAuth2认证**: 使用授权码流登录 +4. **Token管理**: 自动刷新access token +5. **跨域处理**: 配置CORS或使用同域代理