3.1 KiB
组件架构
运行结构
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 提供输入、输出、尺寸变更、退出状态和显式终止。工作区管理器拥有会话,传输关闭只解除附着。
代理持续消费输出,维护有容量上限的历史和终端状态。快照与输出序列号形成重连边界,输出积压策略由协议规定。