设备身份与授权
Weblink 将房间成员资格、设备身份和操作权限分开。发现一台设备,不代表它就是之前配对的设备;证明身份,也不代表获得所有操作权限。访问决定由目标设备自己执行。
本地身份与连接绑定
每个浏览器配置或桌面 WebView 配置,都拥有一对存放在 IndexedDB 中的 ECDSA P-256 身份密钥。这是本地设备身份,不是账户登录。在另一个浏览器里设置相同设备名,不会得到同一密钥或继承权限。
有序的 weblink-device-identity/1 RTC 通道负责交换公钥和本次连接的证明。签名内容将连接绑定到以下值:
| 绑定内容 | 用途 |
|---|---|
| 双方设备 ID 与公钥 | 标识本次交换的两个参与者 |
| 新生成的挑战 | 防止重放之前连接的证明 |
| 双方 DTLS 证书指纹 | 将身份交换绑定到这次传输连接 |
| 配对历史与恢复状态 | 防止记录丢失后被悄悄当作首次使用 |
知道公钥、复用客户端 ID 或复制显示名称,都不能证明持有对应私钥。签名私钥从不发送给另一台设备。
条件允许时,Web Crypto 创建不可导出的原生密钥;所需 API 或算法不可用时,兼容的软件实现会在同一本地配置中保存密钥字节,并使用相同的公开格式。随机性仍来自 crypto.getRandomValues。证明验证失败不会触发该回退;原生 API 不可用时,已有不可导出密钥也不会被悄悄替换。
首次配对与重连证明
首次使用时,如果没有已保存的公钥指纹、配对密钥或隔离记录,有效的当前连接签名证明可以建立自动配对。对端公钥以 SHA-256 指纹固定下来,且必须先保存决定,设备才会变成可信。
这属于首次使用信任。房间准入及可选密码帮助约束谁能参与第一次交换,但自动配对不会独立核实对方的现实身份。已记住的配对历史也会阻止丢失本地记录的返回设备,直接声称自己是首次出现。
建立信任后,双方分别生成独立的 256 位随机配对密钥,通过已验证连接发给对方。每一端保存自己签发密钥的验证材料,以及从对方收到的密钥。
重连使用 HMAC-SHA-256 对包含新挑战、绑定当前连接的数据进行证明,而不是把共享秘密直接当成证明发送。协议先确认与已保存配对关系的连续性,再恢复已记住的权限。
自动恢复与显式修复
配对记录分别保存固定公钥、已签发密钥和已接收密钥。如果双方仍持有一份匹配的共享密钥,连接可以通过认证,并恢复缺失的身份或签发记录。部分身份记录丢失,也可通过保留的签名身份和经过验证的凭据签名绑定恢复;仅声称对方还记得自己,并不足以恢复信任。
恢复必须由双方支持,并通过密码学验证。格式错误的证明、已知密钥的不正确 MAC 或隔离状态,都不能成为降级到首次信任的理由。失去所有可用验证材料时,可能需要重新显式配对。
手动修复使用独立的有序 weblink-device-pairing/1 RTC 通道。一端请求配对,另一端接受或拒绝。请求绑定到当前会话与随机请求 ID,60 秒后过期。取消、断线或到期都会使批准动作失效,旧通知不能授权后来的连接。
接受操作会为当前连接建立新的身份决定,不证明替换身份就是原身份。双方先保存决定,再启用实时权限,然后恢复正常的凭据签发。手动修复恢复默认权限,不会悄悄保留提升过的授权。
验证失败与普通断线
| 事件 | 结果 |
|---|---|
| 身份证明无效,或身份不匹配且无法恢复 | 标记不可信并隔离已记住的关系,拒绝应用权限并取消受保护活动 |
| 普通断线、握手超时、本地传输或存储失败 | 撤回实时权限,保留已记住的身份与权限选择 |
| 重新连接 | 先完成新的证明,才重新应用保存的权限 |
| 显式修复成功 | 保存新决定,恢复默认权限策略 |
不可信连接可以继续用于发现与手动配对,但不能让传输、剪贴板访问、输入或设备自动化继续执行。警告会指向权限设置,显示或关闭警告本身不授予访问权。
身份证明不等于操作授权
配对之后,目标端还会按请求操作检查对应权限类别。默认允许接收内容、提供共享文件列表和共享屏幕;远程控制与自动化需要询问批准。开启屏幕共享权限,不会自动开始采集,也不会绕过系统同意。
授权还有有效生命周期。远程控制绑定到设备与来源,自动化操作也可能需要临时授权。断开连接、撤销权限或替换所属会话时,受该授权约束的活动必须停止。
MCP 还有另一层认证边界:桌面 HTTP Token 认证连接该端点的 MCP 客户端。转发到远端的操作,仍需要经过设备关系,并由目标设备检查权限。持有本地 MCP Token,不能代替远端设备身份或授权。
实现入口
以下路径相对于 apps/web/src/libs/:
| 路径 | 职责 |
|---|---|
domain/device-identity/handshake.ts、domain/device-identity/crypto.ts | 当前连接的证明与密码学操作 |
domain/device-identity/credentials.ts、domain/device-identity/credential-binding.ts | 配对密钥、签名绑定与续期 |
domain/device-identity/manual-pairing.ts | 显式配对请求生命周期 |
infrastructure/identity/device-identity-store.ts | 本地身份与配对持久化 |
application/peer-trust.ts | 信任状态、隔离、恢复与实时权限效果 |
接下来想了解什么?
- 想配对设备或修改访问范围:按照设备配对与权限操作。
- 想把助手接入桌面端点:参考 MCP 与自动化指南。
- 想理解能力声明与授权的区别:阅读 P2P 能力协商。