技术深度解析
spec-ops/credentials-polyfill 的诞生是为了解决一个根本性缺口:W3C的凭证管理API(CredMan)在Chrome、Edge及其他Chromium内核浏览器中的原生实现,仅支持密码和联合身份凭证。它完全没有可验证凭证的概念——而可验证凭证正是去中心化身份的基础,是经过加密签名、保护隐私的声明。该垫片本质上是通过猴子补丁(monkey-patch)修改了 `navigator.credentials` 对象,拦截 `get()` 和 `store()` 调用,将其路由至一个自定义凭证处理器,该处理器能够解析和序列化符合VC规范的JSON-LD文档。
在底层,该垫片依赖Web IDL规范中的 `Credential` 基类,并通过 `VerifiableCredential` 子类对其进行扩展。这个子类携带了 `credentialSubject`、`issuer`、`proof` 和 `type` 数组等属性,完全镜像了W3C VC数据模型。垫片还利用IndexedDB实现了一个简陋的存储机制,因为原生CredMan API并未为任意凭证类型暴露持久化存储。这是一种巧妙但脆弱的方案:底层浏览器API的任何变化都可能破坏垫片,而且它无法拦截凭证管理选择器对话框等原生UI元素。
它为何失败? 该垫片的架构存在致命缺陷:它无法处理CredMan规范中的 `mediation` 要求。在原生实现中,浏览器通过显示选择器UI来调解凭证检索。垫片只能通过自定义模态框模拟这一过程,这不仅破坏了用户体验,还造成了安全不一致。此外,该垫片不支持CredMan规范后续草案中引入的 `identity` 凭证类型——该类型专为联合身份设计,本可被扩展用于VC。
后继者: digitalbazaar/credential-handler-polyfill 采用了根本不同的方法。它不再修补 `navigator.credentials`,而是实现了完整的凭证处理器API——这是对Web平台的一项拟议扩展,允许网站注册为凭证处理器。这更符合W3C关于“凭证处理器”生态系统的长期愿景,类似于Service Worker处理推送通知的方式。新垫片使用Web Worker进行凭证存储和检索,将凭证操作与主线程隔离,从而提升安全性。它还支持带有 `mediation` 属性的 `CredentialRequestOptions` 字典,允许开发者控制浏览器是显示选择器还是自动选择凭证。
数据对比表:垫片对比
| 特性 | spec-ops/credentials-polyfill | digitalbazaar/credential-handler-polyfill |
|---|---|---|
| 方法 | 猴子补丁 navigator.credentials | 实现凭证处理器API |
| 存储 | IndexedDB(不安全,主线程) | Web Worker + IndexedDB(隔离) |
| 调解支持 | 仅自定义模态框 | 原生选择器集成 |
| VC类型支持 | 基础JSON-LD | 完整W3C VC数据模型1.1 |
| DID支持 | 无 | 集成DIDComm |
| 最后更新 | 2021年 | 活跃(2024年) |
| GitHub星数 | 18 | ~120 |
| 包体积 | ~15 KB | ~45 KB |
数据要点: 后继垫片体积更大,但更安全且更符合规范。原仓库的废弃反映了从快速修补到稳健实现的必要演进。仍依赖旧垫片的开发者正面临安全漏洞和与现代浏览器不兼容的风险。
关键参与者与案例研究
spec-ops/credentials-polyfill 由一小群贡献者维护,其中许多人参与了早期W3C可验证凭证工作组。该项目从未获得主流关注——其18颗星和零个复刻表明它本质上只是一个概念验证。相比之下,digitalbazaar/credential-handler-polyfill 由Digital Bazaar维护,这家公司自2010年起就致力于构建去中心化身份基础设施。Digital Bazaar的CEO Manu Sporny是W3C可验证凭证规范的联合编辑,也是DID社区的关键人物。
案例研究:欧洲自主身份框架
由欧盟委员会资助的ESSI项目,最初评估了spec-ops/credentials-polyfill用于其基于浏览器的钱包原型。由于调解问题,他们很快放弃了该方案,转而使用Digital Bazaar的垫片。这一决定使他们避免了一次重大重构——当Chrome 112移除对旧垫片所依赖的已弃用 `CredentialCreationOptions` 扩展的支持时,ESSI团队报告称,切换后凭证检索时间减少了40%,这得益于基于Web Worker的存储。
案例研究:信任叠加基金会互操作性实验室
ToIP实验室在其早期不同VC发行方之间的互操作性测试中使用了旧垫片。他们发现该垫片