架构
组件与数据流
每一个活动部件、它运行在哪里,以及它们之间的每一条连接,包括所用的协议和每一方使用的凭据。
本文描述截至 2026年9月19日 已实现的 LayerT。尚未实现的内容均已标注。
浏览器端
LayerT 的浏览器端是一个 Manifest V3 扩展程序。您的 MDM 使用适用于 macOS 和 Windows 的 Chrome 企业策略文件安装它,并将其图标固定到工具栏(也有适用于 Linux 的文件)。同一策略会关闭无痕模式、访客模式和 Chrome 自带的密码管理器;在 Windows 上,它会将 LayerT 添加到您其他强制安装的扩展程序中,而不是替换它们。
| 部分 | 是什么 | 说明 |
|---|---|---|
| Service Worker | 扩展程序的后台进程 | 保存设备凭据,获取并校验签名策略,批量上报审计事件,代理共享账号授权,运行会话到期计时器 |
| 内容脚本 | Chrome 在每个页面的隔离环境(isolated world)中运行的脚本 | 与页面自身的 JavaScript 相互隔离。它们只读取您的规则指定的字段中的值,并填写共享账号登录信息 |
| 页内提示 | 阻止卡片、通知、账号菜单和会话标签 | 绘制在封闭的 Shadow Root 中,因此页面脚本无法读取或更改其样式。按钮只响应真实的点击和按键。它们使用系统字体,因此 LayerT 绝不会向其他公司的页面加载网络字体 |
| 账号菜单框架 | 在提示内以框架形式显示的扩展程序页面 | 共享账号列表位于扩展程序自己的源(origin)中,而不在页面中 |
| 工具栏弹出窗口 | 启动器、审批和快速添加 | 一个扩展程序页面;绝不属于任何网站 |
页面无法伪造的信任标识. 只要某个标签页上显示着 LayerT 提示,LayerT 就会在自己的工具栏图标上点亮一个琥珀色圆点。网站可以模仿提示的外观,但无法在浏览器工具栏中绘制内容。LayerT 提示也从不索要密码,并且有一项测试确保任何提示都不包含密码字段。
LayerT 云端
| 部分 | 是什么 | 说明 |
|---|---|---|
| 控制台和 API | 一个 Web 应用 | 管理控制台、扩展程序的 API、SCIM 2.0 服务器和 OpenID Connect 客户端 |
| Worker | 一个没有公网地址的独立服务 | 运行定时任务并发送通知 |
| 运营控制台 | 供 LayerT 员工使用的独立站点 | 创建和管理组织。员工只有在获得该组织批准后才能查看组织内部(见身份、租户与角色) |
| Postgres | 记录系统 | 签名策略版本、审计事件、目录数据、请求和会话。共享账号密钥以密文形式保存在单独的表中 |
| 对象存储 | Google Cloud Storage | 仅存放会话录制,在设备上加密后再上传。存储桶中从不保存明文 |
| 密钥服务 | Google Cloud KMS | 使用 Ed25519 为每个策略版本签名,并封装用于密封每个共享账号密钥和每段录制的密钥。密钥可以通过该服务使用,但永远无法从中复制出来。已构建,随首次生产部署开启;开发环境中以本地密钥代替 |
| 定时任务 | Worker 上的周期性任务 | 关闭过期的请求和会话、执行保留期限、在策略过期前重新签名、目录变更后重建策略、发送通知和提醒、检查网关健康状况 |
托管. LayerT 尚未投入生产。它将运行在位于欧盟的 Google Cloud 上,区域为米兰(
europe-west8),其密钥和数据库备份保存在 Google 的欧盟多区域(multi-region)中。Cloudflare 将负责 DNS 并发送通知邮件。服务提供方列于数据处理。目前尚不提供其他数据驻留选项。LayerT 之外
| 部分 | 归属 | LayerT 如何使用它 |
|---|---|---|
| 您的身份提供商 | 您 | 通过 SCIM 2.0 向 LayerT 发送人员和组,并通过 OpenID Connect 让管理员和人员登录。为 JumpCloud 构建 |
| 您的 MDM | 您 | 推送 Chrome 策略,用于安装 LayerT、固定其图标,并告诉它所属的组织 |
| 员工使用的网站 | 供应商 | LayerT 读取并填写这些网站上的表单。它从不更改供应商的服务器或流量 |
数据流
以下每一条数据流都通过 HTTPS 传输。
| 数据流 | 方向 | 传输内容 | 身份验证方式 |
|---|---|---|---|
| 目录同步 | 身份提供商 → API | 人员、组、在职状态(SCIM 2.0) | LayerT 签发的 SCIM 令牌,仅以哈希形式保存 |
| 控制台登录 | 浏览器 ↔ API ↔ 身份提供商 | OpenID Connect 授权码流程 | 签名的 ID 令牌,依据提供商公布的密钥进行校验 |
| 控制台使用 | 浏览器 → API | 决定、规则、设置 | 服务器端会话,每次请求都重新检查 |
| 注册 | 扩展程序 → API → 身份提供商 | 人员登录一次;浏览器获得设备凭据 | 身份提供商的登录 |
| 策略同步 | API → 扩展程序 | 贵组织的签名策略 | 设备令牌;策略本身在浏览器中使用 Ed25519 校验 |
| 审计 | 扩展程序 → API | 关于阻止、匹配、审批和会话的事件 | 设备令牌,必须与事件所属的设备一致 |
| 请求与授权 | 扩展程序 ↔ API | 访问请求、决定、共享账号授权 | 设备令牌,绑定到具体人员和已注册的浏览器 |
| 录制 | 扩展程序 → API → 对象存储 | 加密的录制分块 | 设备令牌;分块已经加密 |
| 定时任务 | Cloud Scheduler → Worker | 仅触发信号 | 由 Google 签名、属于调度器自身服务账号的身份令牌 |
| 登录结果 | 扩展程序 → API | 共享账号登录是否成功,以及在哪一步停止。从不包含值、标签或页面文本 | 设备令牌 |
| 设备信息 | 扩展程序 → API | 扩展程序版本、是否由策略安装、浏览器、操作系统和策略版本 | 设备令牌 |
| 通知 | Worker → 审批人 | 等待某人处理的请求、答复和警报,通过电子邮件、Slack 和扩展程序发送。不含密钥,也不含完整的值 | 电子邮件通过 SMTPS;Slack 通过其 API 和贵组织的 Slack 连接;扩展程序使用设备令牌 |
| Slack 中的决定 | Slack → API | 审批人对请求点击的批准或拒绝 | Slack 的请求签名,并在点击的那一刻再次检查审批人的权限 |
扩展程序发送什么,不发送什么
- 当规则匹配时,它会发送审计事件,包括网站、字段以及匹配的值。审计人员正是借此看到某个个人邮箱地址被阻止了。
- 它会发送附有人员理由的访问请求;当某个共享账号开启录制时,它会发送加密的录制分块。
- 它会报告每次共享账号登录是否成功,以及浏览器的基本信息,以便 IT 了解哪些笔记本电脑受到保护。这些报告不包含输入的值,也不包含页面文本。
- 在录制的共享账号会话之外,它不发送页面内容。它从不发送浏览历史,也从不发送在您的规则未指定的字段中输入的任何内容。