跳到正文
← 使用教程

Veramo DID 解析返回空文档:检查 resolver、元数据和密钥用途

链小知 · 进阶 · 核验 · 依官方文档整理

以已有 DID 解析结果定位插件缺失与 fragment 问题,并避免把 DID 解析成功当身份或凭证事实验证。

开始前准备

  • 准备已配置 Veramo Agent 的依赖版本、公开 DID URL 与脱敏 DIDResolutionResult/错误记录。
  • API 文档显示 v7.0.0,官方 Introduction 仍有 public beta 提示;项目应按实际安装版本核对。只处理现有 DID,不创建身份、签名或调用付费 resolver。

1. 确认配置了对应 DID method

先识别输入前缀 did:<method>:…,再检查 Agent 的 DIDResolverPlugin。插件构造需要 Resolvable 或 method 到 DIDResolver 的映射;空配置会出现 invalid_setup。安装 did-manager/身份 provider 不能代替 resolver 配置,读 DID 文档与管理私钥属于不同能力。

检查结果:方法前缀与 resolver 映射一致,插件初始化没有失败。

2. 用 didUrl 调用并等待完整结果

接口形如 await agent.resolveDid({didUrl:"<完整DID>"}),返回 DIDResolutionResult 而非文档本身。官方 Ganache 示例含网络标识;照抄示例地址不代表你的 DID 属于该网络。保留完整方法标识、输入和调用时间,不把省略的 DID 改写成另一种 method。

检查结果:输入 didUrl 与响应对应;已等待 Promise,没有将外层 result 当 didDocument。

3. 先看解析元数据和 null

分别检查 didResolutionMetadata.error、didDocument、didDocumentMetadata。resolver 会补齐缺失字段,didDocument 的默认值是 null;即使对象包含三类字段,也可能解析失败。按返回错误检查 method 配置或读取服务状态,异常与 null 都不能兜底成一份空的成功文档。

检查结果:失败原因、文档为空和成功文档三种结果清楚区分。

4. 核对文档身份与引用用途

有文档时核对 id、controller、verificationMethod,以及 authentication/assertionMethod 的引用。官方示例 blockchainAccountId 为 eip155:1337:…,这个 Ganache 标识不能当 Ethereum 主网地址证明。若准备用某个 key 验证凭证,应检查它是否被相应用途引用,而非仅存在于 verificationMethod。

检查结果:文档 id 与查询相符;目标密钥的用途引用和网络方法标识可回查。

5. 按 section 找 fragment 并限定结论

可调用 getDIDComponentById({didDocument, didUrl:"<DID>#<key-id>", section:"assertionMethod"}) 查相应用途的组件;当前源码支持相对 fragment,找不到会抛 not_found。没有合适的引用应回查文档版本与 key-id,不能静默使用另一个 key。成功解析只提供方法定义的文档,凭证签名/状态/信任仍要相应验证流程。

检查结果:组件存在与用途匹配;结论只写解析和引用结果,不宣称自然人身份或凭证内容真实。

怎样确认完成

  • 保存 method/resolver 配置、完整输入、三类响应字段和目标组件用途。
  • 本文为文档与官方源码核对,没有真实 DID 查询、签名或凭证验证结果。

常见错误与边界

  • Resolver 可以访问特定外部协议;DID method 不等于网站网络筛选里的主网名字。
  • didDocument 为 null 仍可能伴随完整外层对象,不能仅检查对象是否存在。
  • next 分支源码是排查参考,应与安装版本比较;fragment 解析不是凭证验签。

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据