从现有DID创建IOTA可验证凭证时如何获取fragment变量?
解决IOTA identity.rs中从现有DID获取签名用的Fragment问题
核心概念
你提到的fragment其实是DID文档中验证方法(Verification Method)的ID后缀,格式为#xxx,用来指定签发VC时使用哪一对密钥。创建新DID时工具会自动生成这个片段并返回,但解析现有DID时,需要从文档的验证方法列表中手动提取。
具体步骤
- 筛选可用的验证方法:签发VC需要使用类型为
AssertionMethod的验证方法(W3C VC规范要求),先从解析后的issuer_document中筛选出这类方法。 - 提取Fragment:从选中的验证方法ID中截取
#之后的部分,就是需要的fragment字符串。
代码实现
替换你代码中fragment相关的疑问部分,改成以下逻辑:
// 从发行方DID文档中获取用于断言签名的验证方法 let assertion_method = issuer_document .assertion_methods() .next() // 取第一个可用的,可根据实际需求筛选特定密钥 .ok_or_else(|| anyhow::anyhow!("发行方DID文档中没有可用的AssertionMethod"))?; // 提取验证方法ID中的fragment部分(#后面的内容) let fragment = assertion_method.id().fragment() .ok_or_else(|| anyhow::anyhow!("验证方法ID不包含fragment"))?;
关键注意事项
- 确保你选中的验证方法对应的密钥已经存在于Stronghold和
issuer_storage中,否则调用create_credential_jwt时会报错密钥未找到。 - 如果DID文档中有多个
AssertionMethod,可以根据密钥ID或类型(如Ed25519VerificationKey2020)筛选你需要的那一个。
内容的提问来源于stack exchange,提问作者GeneralBohne
相关产品推荐
相关产品推荐

