Files
WorkspaceAccessHost/docs/architecture.md
T
Youmu Liu 4bc3552167
Verify / verify (ubuntu-latest, linux-x64) (push) Canceled after 0s
Verify / verify (windows-latest, win-x64) (push) Canceled after 0s
Initialize cross-platform workspace host scaffold
2026-09-29 11:30:51 +08:00

54 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 组件架构
## 运行结构
```mermaid
flowchart LR
Client[远程客户端] -->|OIDC 登录| Auth[authentik]
Client -->|WSS| Broker[Host / Broker]
Broker --> Policy[认证校验与系统账户映射]
Broker --> Gate[Host 独占控制权]
Broker -->|本机认证 IPC| Agent[用户会话代理]
Agent --> Terminal[PTY 与终端状态]
Terminal --> Shell[shell / TUI 进程]
```
## 代码组织
解决方案包含一个产品项目 `src/WorkspaceAccessHost.csproj`、一个测试项目 `WorkspaceAccessHost.Tests` 和一个 NUKE 构建项目 `Build`。产品代码直接在 `src/` 下通过目录和命名空间组织职责:
| 产品目录 | 职责 |
| --- | --- |
| `Core/` | 共享模型、平台描述和契约 |
| `Authentication/` | 外部身份、认证与系统账户映射 |
| `Connections/` | 连接控制权、接管和工作区归属 |
| `Terminals/` | PTY 契约、终端状态与输入输出 |
| `Platforms/Windows/` | Windows 平台策略及 ConPTY、用户令牌、命名管道的实现位置 |
| `Platforms/Linux/` | Linux 平台策略及 PTY、UID/GID、Unix socket 的实现位置 |
| `Hosting/` | 服务生命周期、网络入口、连接仲裁和健康检查 |
| `Agent/` | 用户上下文中的终端、子进程和画面状态 |
领域逻辑依赖接口与共享模型,系统调用集中在对应平台目录,入口负责注册平台实现。
## 程序角色
同一套发布产物以 `WorkspaceAccessHost host` 运行服务宿主,以 `WorkspaceAccessHost agent` 运行用户代理。Windows 可执行文件带 `.exe` 扩展名。角色参数后的选项传递给对应宿主构建器;无参数或 `--help` 显示使用方式,未知角色以退出码 2 结束。
Host 和 Agent 分别运行在服务账户与目标用户上下文中,各自拥有进程生命周期,通过本机 IPC 协作。测试与 NUKE 项目承担验证和开发控制职责。
## 生命周期和信任边界
authentik 身份、broker 连接、系统登录上下文、工作区和终端拥有独立标识。客户端的系统用户名是授权请求;最终账户由服务端映射规则确定。
代理 IPC 需要验证对端的系统身份、目标用户、host 实例和协议版本。Windows 使用命名管道 ACL,Linux 使用 socket 文件权限与对端凭据。代理仅接受经验证的 broker 指令。
broker 使用服务账户运行。Windows 用户代理通过目标用户登录启动;Linux 启动组件负责完成组、用户和会话设置后交给用户代理。系统身份切换保持在明确的本机接口中。
首期 broker 进程生命周期是连接控制状态的边界。用户代理在 WebSocket 断开时持续存在;broker 重启后的代理重新登记、归属恢复与控制权版本同步需要完成集成验收。
## 终端契约
`IPtySessionFactory` 在已建立的用户上下文中启动终端。`IPtySession` 提供输入、输出、尺寸变更、退出状态和显式终止。工作区管理器拥有会话,传输关闭只解除附着。
代理持续消费输出,维护有容量上限的历史和终端状态。快照与输出序列号形成重连边界,输出积压策略由协议规定。