34 lines
3.1 KiB
Markdown
34 lines
3.1 KiB
Markdown
# 组件架构
|
|
|
|
## 目标链路
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
Client[CLI] -->|OIDC| Auth[authentik]
|
|
Client -->|HTTPS / WebSocket| Server[Workspace Access Server]
|
|
Server --> Policy[授权与账户映射]
|
|
Policy --> Manager[Session Manager]
|
|
Manager --> Gate[工作区控制权]
|
|
Manager --> SSHAuth[后端 SSH 凭据与主机信任]
|
|
Manager -->|内网 SSH| Sshd[Windows / Linux sshd]
|
|
Sshd --> Shell[用户 shell / TUI]
|
|
```
|
|
|
|
Server 对每个工作区持有一条后端 SSH 会话。WebSocket 只是客户端附着;断开时 Server 继续读取 SSH 输出。工作区之间有独立归属与控制权。身份由 `(issuer, subject)` 确定,系统账户由服务端映射。
|
|
|
|
## 项目组织
|
|
|
|
解决方案包含 `src/server/WorkspaceAccessServer.csproj`、`src/client/WorkspaceAccessClient.csproj`、`tests/WorkspaceAccessServer.Tests` 和 `build/Build.csproj`。Server 的 `Authentication/` 放 OIDC 配置、身份模型与授权解析,`Connections/` 放工作区控制权,`Hosting/` 放 HTTP/WebSocket 入口。`Ssh/` 已实现密码及托管私钥 SSH Broker、主机公钥校验、Session Manager 和本机诊断命令;SSH CA 与密钥实机验收仍待完成,详见[SSH 会话设计](ssh-session.md)。
|
|
|
|
CLI 的 `login` 和 `connect` 通过单一域名发现 OIDC 配置,复用 PKCE 浏览器登录与回调页,并让 Server 验证身份;`connect` 从受保护的 `/resources` 取得当前授权目标及会话状态,选择后按目标或会话 ID 的 query 建立正式 WebSocket 交互;也支持直接指定 ID。原有一次性 Linux `ls` 命令继续用于诊断。正式 Client 的真实 authentik 登录、Server 身份验证及 `.100 → .101` 交互式 `ls` 已实测,见[单域名入口](client-server-transport.md)。Caddy 等反向代理可承接公网 TLS 入口;内网 `sshd` 只允许 Server 访问。Windows OpenSSH 已使用 ConPTY,因此 Server 不再自己启动 `pwsh.exe` 或实现平台 PTY。
|
|
|
|
## 信任与生命周期
|
|
|
|
OIDC 授权与 SSH 后端认证是两个边界。Server 只能为已授权的目标账户建立 SSH 会话,需校验目标主机密钥;后端 SSH 凭据不能代替外部连接的 OIDC 授权判断。若未来选择 SSH CA,还需在目标 OpenSSH 版本验收证书和账户映射。
|
|
|
|
首期断线持续性以 Server 与后端 SSH 连接存活为条件。Server 崩溃或内网 SSH 断开会失去该 SSH 终端;要跨越这一边界,未来需要目标机器上独立的会话持有者。画面恢复还需要持续消费 VT 输出、保持容量上限并生成一致的快照。
|
|
|
|
## 已有框架
|
|
|
|
`SshWorkspaceManager` 为每个工作区建立一份 `WorkspaceConnectionGate`,以不可伪造的 lease 和递增 generation 仲裁接管,并在同一临界区校验输入入队。认证、授权与账户映射完成后才可调用该核心。Data/ 已实现 PostgreSQL 管理模型与迁移,Authentication/SshAccessResolver 通过一次 LINQ 查询解析授权和目标信任配置,见[数据库](database.md)。当前已有 OIDC、内部 SSH 和 WebSocket 的首版集成;托管密钥的真实 SSH 连接与正式端到端环境验收仍待完成,见[交付状态](implementation-status.md)。
|