Files
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

3.1 KiB
Raw Permalink Blame History

组件架构

运行结构

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 提供输入、输出、尺寸变更、退出状态和显式终止。工作区管理器拥有会话,传输关闭只解除附着。

代理持续消费输出,维护有容量上限的历史和终端状态。快照与输出序列号形成重连边界,输出积压策略由协议规定。