架构
共享账号
LayerT 将团队的共享登录信息密封保存,让合适的人在规定时间内使用它们,并为他们填写供应商的登录表单。任何人都不需要知道密码。
本文描述截至 2026年9月19日 已实现的 LayerT。尚未实现的内容均已标注。
存储密钥
密码、验证器(TOTP)设置密钥和保密的登录字段使用 AES-256-GCM 信封加密:
- 每个共享账号都有自己的随机 256 位数据密钥。每个密钥(secret)都在该数据密钥下使用各自的随机 nonce 加密。
- 数据密钥本身由保存在 Google Cloud 密钥服务中的密钥加密密钥进行加密(“封装”)。该服务按请求解封,从不交出密钥加密密钥,并且每次使用都会在 Google 一侧留下记录。此功能已构建,随首次生产部署开启。开发环境中以本地密钥代替。
- 只存储密文,保存在单独的表中,与账号设置分开。删除账号会同时删除其密钥。
- 更改密码会在新的数据密钥下重新加密两个密钥,并被记录。
谁可以使用账号
| 控制项 | 工作方式 |
|---|---|
| 访问权限 | 授予目录组、角色或指定人员。组成员关系通过 SCIM 从您的目录获取 |
| 敏感级别 | 低、中或高。默认情况下,中级和高级账号每次使用前都需要审批人批准。只有 IT 可以将账号标记为高级 |
| 审批 | 请求在 30 分钟后过期。任何人都不能审批自己的请求。批准时会重新检查申请人是否仍在职、是否仍有权使用。如果两位审批人同时做出决定,只有一个决定有效 |
| 同一时间只有一人持有 | 可选,按账号设置。第二个人会看到谁正在使用以及使用到何时 |
| 会话时长 | 按账号设置,默认 1 小时。可以延长,但从批准起总计不超过 8 小时 |
让人员登录
- 浏览器选择人员从字段中的 LayerT 图标或工具栏启动器中选择账号。
- LayerT 云端检查会话必须处于活动状态,属于此人和这个已注册的浏览器,并且此人必须仍在职且仍有权使用。
- LayerT 云端解密只有这时,密码才会在内存中解密,并通过 HTTPS 返回一个授权。
- 浏览器匹配网站只有当页面正是该账号的确切网站时,扩展程序才会将授权交给页面。
- 页面填写扩展程序从 Chrome 的隔离环境中填写供应商自己的表单。LayerT 从不显示密码。
确切网站规则
共享账号绑定到确切的网站:协议、主机和端口必须完全匹配,不允许通配符。一个账号可以列出多个网站,但每一个都必须是确切的。必须使用 https。浏览器会检查页面,LayerT 的 Service Worker 会使用 Chrome 为发起请求的框架报告的地址再次检查,而不是依据页面自称的任何信息。仿冒域名什么也得不到。
保护账号菜单
账号列表是一个显示在封闭 Shadow Root 内的扩展程序页面,因此网站无法读取它或更改其样式。它只接受真实的点击,并且只在完全可见一小段时间之后才接受,以防范将菜单滑到光标下方的伎俩。这降低了点击劫持的风险,但并未消除风险。如果页面移动、遮挡或更改其样式,它会关闭。账号也可以设置为只能从工具栏启动,从而完全关闭页内菜单。
提交表单
自动提交默认关闭。只有在账号通过测试登录之后,账号负责人才能开启它;发布新的登录配方会再次将其关闭。即使开启,LayerT 也只在以下条件全部满足时才提交:人员明确选择了该账号、位于确切的网站、处于顶层框架、所有已填写的字段仍然可见,并且绝不会在页面加载时提交。遇到 CAPTCHA 时,LayerT 会暂停,并交由人员处理。
验证器代码
LayerT 在其服务器上生成验证器代码(RFC 6238)。只有当前的六位代码会在需要时发送到浏览器,并像密码一样被填写。审计日志记录的是使用了代码这一事实,从不记录代码本身。
如果代码未能填入,持有会话的人可以在 LayerT 工具栏弹出窗口中查看并复制当前代码。其他任何人都不能查看,并且每次查看都会被记录。
设置密钥(TOTP 种子)保存在 LayerT 的服务器上。查看它的唯一方式是提交一个由两人批准的密码请求,其中一人必须是所有者或合规官。它只显示一次(见密码请求)。
登录字段与备注
有些网站需要的不只是用户名和密码,例如账户 ID、组织 ID 或 PIN。一个账号可以保存额外的登录字段。新字段默认为保密字段:保密字段像密码一样被密封,并且只会填入密码类型的输入框。显示字段(例如 AWS 账户 ID)对可以使用该账号的人可见。额外字段由账号的登录配方填写,从不靠猜测。
每个账号还有备注,用于记录人员需要了解的事项(“使用新加坡区域”、“不要勾选记住我”),每条备注都有作者和编辑历史。
人员能看到什么、不能看到什么
在登录过程中,LayerT 从不显示密码。它不会出现在启动器、菜单、通知或审计日志中,LayerT 也从不将其保存在浏览器中。唯一的例外是下文的密码请求。
结束会话
- 按时结束。 在结束前一分钟,LayerT 会提供延长或立即退出登录选项。到时后,它会清除该网站的 Cookie 和该标签页的网站存储,从而使人员退出登录。
- 由管理员结束。 所有者或 IT 管理员可以在控制台中结束正在进行的会话,并注明原因。LayerT 会立即拒绝该会话的后续授权,人员的浏览器会在大约一分钟内退出登录。他们会被告知会话已由管理员结束,但不会被告知是谁或原因。
- 在人员离职时。 当您的目录停用某人或将其从某个组中移除时,LayerT 会在所有地方关闭其请求和会话。
设置账号
- 检测。 LayerT 会自动查找登录字段。在无法确定时,它会请人员指出字段,并将其保存为建议的修正,供账号负责人审核。它从不自动应用于其他任何人。
- 录制配方。 对于多步骤登录,负责人只需录制一次步骤。配方存储的是字段的位置,从不存储输入的内容。
- 测试登录。 仅限负责人执行、并会被记录的一次运行,用于在开启自动提交之前证明配方有效。
- 签名配方。 每个配方在运行前都会进行签名检查。如果检查失败,LayerT 会退回到自动检测,绝不提交表单,并报告原因。
- 登录健康状况。 控制台会按网站和账号,以文字形式显示过去 7 天、30 天或 90 天内哪些登录成功,以及其他登录在哪一步停止。
- 导入。 管理员可以从 JumpCloud Password Manager 的导出文件中导入账号。文件在管理员的浏览器中读取;预览从不显示密码,所创建的账号随后会像其他账号一样在 LayerT 的服务器上密封保存。每次导入都会被记录。
密码请求
有时,某人确实需要查看密码、设置密钥或保密字段:例如交给供应商的支持团队,或设置一台新设备。
- 控制台申请人员提出申请并说明原因。所有者和 IT 管理员可以针对任何账号提出申请;其他人只能针对自己可以使用或负责的账号提出申请。
- 控制台两人批准由申请人以外的两个人批准,其中一人必须是所有者或合规官。这类请求不能在 Slack 中或通过电子邮件做出决定。
- 控制台查看一次在一小时内,如果申请人上次登录已超过 10 分钟,需要重新登录,然后可查看该值一次。第二次查看会被拒绝。
- LayerT 云端标记为已查看该值被标记为已查看。所有者、合规官和账号负责人会收到警报,账号负责人会被要求在供应商处更改该值。
紧急访问导出
用于灾难恢复的离线导出是加密的,需要两名保管人各自使用自己的密码短语才能打开。生成导出会被记录。
限制
- 位于该账号另一个网站所属框架内的登录表单不会显示页内菜单。请从工具栏启动器中选择账号,LayerT 会填写该框架。它在那里从不自动提交。
- 不支持绘制在 canvas 上的表单,或位于网站自身封闭 Shadow Root 内的表单。
- LayerT 目前还不会自动轮换密码。
- 密码请求会在值被查看后立即发送警报。导出目前还不会发送警报 提议中;它们记录在审计日志中。