feat(client): add authorized WireGuard device enrollment and desktop connection

This commit is contained in:
opsx committed 2026-10-21 14:53:55 +08:00
1 parent d2f1f5040e
commit 6dd3c7dd45
25 files changed
+3274 -131

No files matched your search

+18 -1
View File
@@ -4,7 +4,7 @@
|---|---|
| 版本 / 变更级别 | 0.1 / S3(未来涉及设备凭据、系统路由和隧道权限) |
| 设计状态 | Draft |
| 实现状态 | 客户端骨架、健康检查后自动保存地址、概览实时检测、无模拟线路、连接按钮诊断提示、只读本机工具检测及托盘入口;自动下发与拨号功能未实现 |
| 实现状态 | 第一阶段骨架已完成;第二阶段终端用户 API、设备 Peer 登记/撤销与桌面连接代码已集成,尚待目标 OS 真实握手验收 |
| 负责人 / 日期 | 待指定 / 2026-10-21 |
| 关联需求 | 仓库根目录新增 `client/`,Rust + Tauri v2 桌面客户端,优先对接 WireGuard |
| 批准状态 | 用户要求评估并新增客户端;后续接口契约尚待确认 |
@@ -99,3 +99,20 @@ Rust 系统隧道适配层(后续) ← 仅在本机保存的 WireGuard 私
| 企业账号映射到 VPN 权限、MFA/OIDC 与设备配额 | 阻塞自动拨号 | 稳定用户 ID + 单独设备授权策略,不按同名邮箱猜测 |
| 会话断开是否自动注销 Peer | 阻塞自动拨号 | 区分临时连接与已授权设备;明确租约、续期与撤销 |
| 是否需要代理模式/TCP/飞连兼容 | 不阻塞标准 WireGuard UDP | 先证明原生 WG 客户端与当前网关互通 |
## 8. 第二阶段:终端用户自动接入(2026-10-21)
**实现范围**:新增 `/api/client/login` 及令牌保护的线路、设备登记、配置、状态、撤销接口;管理后台展示设备和撤销入口。登录按 VPNUser 的实际密码与 TOTP 验证,令牌内的授权快照绑定拨号记录 ID 和凭据指纹,后续逐次核对记录仍存在、已启用、凭据未变化。管理员禁用/删除/改密或改变 MFA 时先撤销对应 WireGuard 设备,再注销相关令牌。客户端在 Rust 生成私钥,本机按服务器和用户名隔离设备记录,支持 Linux/macOS `wg-quick` 一键连接;未实现 Windows 系统隧道。
**账号入口与版本检测**:`/users` 是后台管理员,`/vpn-users` 才是客户端拨号身份。客户端先请求匿名 `/api/client/capabilities` 确认服务端支持,再发送密码;旧服务端将未知 API 返回 200 HTML 时明确提示升级。`oidc: false` 只表示 WireGuard 客户端浏览器免密码登录尚未实现,不影响 OpenVPN 独立插件的 OIDC 模式。后续可用浏览器 Authorization Code + PKCE、稳定飞书身份与 VPNUser 授权映射、一次性设备注册授权实现免密码;`openvpn-auth-oauth2` 的 OpenVPN 管理接口不能直接用于 WireGuard。是否有标准 OIDC issuer、回调域名及身份映射规则需接入前确定。
**持久化与兼容**:`AutoMigrate` 新增 `client_devices`、`client_sessions` 表;现有 VPNUser、Tunnel 及老 Peer 不重写。终端令牌仅存 SHA-256 哈希,旧客户端不存在有效令牌;设备记录绑定 VPNUser ID,同名但密码不同的线路不能借授权互访。用户密码/MFA 变更前的 Peer 永久撤销,需要客户端再次登录并重新登记设备。客户端允许 HTTP 控制面地址,但明确显示明文风险;生产建议 HTTPS。
**风险与恢复**:设备增删先协调运行态与磁盘配置;下发失败会尝试清理部分创建的 Peer,清理失败保留设备记录及审计,管理员应核对 `wg show` 和管理设备页。变更前备份 SQLite 数据、WireGuard 专线目录;如迁移或启动失败,回退二进制与数据库备份,不能只回滚二进制并假定新 Peer 自动失效。关闭新客户端 API 或撤销客户端令牌不等于断开已登记 Peer,须同时撤销设备/停止对应专线。Mac 提权调用与本机路由/DNS 回滚须在目标系统实机验收;Windows 暂不支持拨号。
| AC | 对应需求 | 操作与预期 | 当前证据 |
|---|---|---|---|
| AC-03 | FR-03 | 同名用户两线路使用不同密码,旧令牌不得访问另一线路;修改凭据后令牌失效 | 后端回归测试通过,真实 LDAP/TOTP 流程待验 |
| AC-04 | FR-04 | 公钥登记/撤销后持久配置与运行接口一致,旧用户被禁用时撤销 Peer | 后端 Peer 单测通过,运行态故障注入待验 |
| AC-05 | FR-05 | Linux/macOS 授权后连接及断开,路由和 DNS 恢复 | Rust 单测通过;目标系统实机未验 |
| AC-06 | FR-06 | 自动领取配置;握手超时显示重新连接中;更换线路不丢原设备密钥 | Rust 单测和前端构建通过;真实网关握手未验 |