# 使用 Spruce DID Kit 颁发 Aleo 的可验证凭证

By [Yaakov](https://paragraph.com/@yaakov) · 2024-08-16

---

使用 Spruce DID Kit 颁发 Aleo 的可验证凭证
================================

### 介绍

[Spruce DID Kit](https://www.sprucekit.dev/) 是一个功能强大的工具包，旨在帮助开发者构建和管理去中心化身份（Decentralized Identity）。它是 SpruceKit 生态系统的一部分，专注于实现和管理符合 W3C 标准的可验证凭证（Verifiable Credentials，VC）和去中心化标识符（Decentralized Identifiers，DID）。通过使用 Spruce DID Kit，开发者可以轻松地创建、签署、验证和管理数字身份和凭证，确保身份数据的安全性和隐私性。

#### 主要功能和组件

1.  **DIDKit**: 这是 Spruce DID Kit 的核心库之一，提供了处理 W3C 可验证凭证和去中心化标识符的工具。DIDKit 支持各种数据模型和协议，帮助开发者实现标准化的身份管理解决方案。
    
2.  **TreeLDR**: 一种模式定义语言，用于描述模式的结构和语义。它连接了 RDF（资源描述框架）与结构化模式框架（如 JSON Schema），提供了更丰富的数据描述能力。
    
3.  **Rebase**: 这个库用于处理加密可验证的声明，并基于这些声明发行可验证凭证（VC）。它确保了声明的真实性和可信性，是身份验证流程的关键部分。
    
4.  **以太坊登录**: 这一功能允许用户使用其以太坊账户和 ENS（以太坊名称服务）配置文件来控制他们的数字身份。它提供了一种新的身份验证方法，增强了用户对其数字身份的控制。
    

#### 使用场景

Spruce DID Kit 可用于多个场景，包括但不限于：

*   **数字身份验证**：创建和验证用户的数字身份，确保用户数据的真实性和隐私性。
    
*   **身份钱包构建**：开发支持可验证凭证的数字钱包，用户可以在这些钱包中存储和管理其身份数据。
    
*   **现有系统增强**：将可验证凭证功能集成到现有的身份管理系统或钱包中，提升系统的安全性和功能性。
    

### 快速入门指南

本教程将带你了解如何使用 SpruceID 工具，重点讲解使用 DIDKit CLI 程序进行凭证发行和验证的基础知识。

#### 第0步：安装 DIDKit

要在GNU/Linux、MacOS或Windows+WSL上安装DIDKit命令行程序，首先需要安装Cargo。

    cargo install didkit-cli
    

这将会把 `didkit` 二进制文件添加到你的 Cargo 安装路径中，通常位于 `~/.cargo/bin`，你可以将其添加到系统的PATH中以方便使用。

#### 第1步：使用 DID 发行和验证你的第一个可验证凭证（VC）

**生成 did-key DID**要发行你的第一个凭证，你需要一个签名密钥。使用DIDKit生成一个Ed25519私钥，并使用did-key DID方法创建一个DID：

    didkit generate-ed25519-key > issuer_key.jwk
    issuer_did=$(didkit key-to-did key -k issuer_key.jwk)
    echo $issuer_did
    

在准备好签名密钥及其DID后，指定要签名的可验证凭证（VC）的JSON格式：

    cat > unsigned-vc.json << EOF
    {
        "@context": "https://www.w3.org/2018/credentials/v1",
        "id": "urn:uuid:$(uuidgen)",
        "type": ["VerifiableCredential"],
        "issuer": "${issuer_did}",
        "issuanceDate": "$(date -u +%FT%TZ)",
        "credentialSubject": {
            "id": "did:example:my-data-subject-identifier"
        }
    }
    EOF
    

`@context` 属性表明这个JSON对象是一个W3C可验证凭证。`id` 属性是这个VC的标识符。`type` 属性识别这个VC为一个基本数据模型。`issuer` 属性包含发行者的URI（即之前生成的did-key），`issuanceDate` 表示发行时间（当前UTC时间）。`credentialSubject` 包含实际的声明。

**签署VC**要使用DIDKit CLI签署VC，指定签名密钥的路径、验证方法（`-v`）、证明目的（`-p`）和未签名的凭证：

    vm=$(didkit key-to-verification-method key --key-path issuer_key.jwk)
    didkit vc-issue-credential --key-path issuer_key.jwk \
                               -v "${vm}" -p assertionMethod \
                               < unsigned-vc.json > signed-vc.json
    cat signed-vc.json
    

这将生成一个已签名的VC。验证已签名的VC：

    didkit vc-verify-credential < signed-vc.json
    

确保没有出现任何检查失败、警告或错误。为了验证，修改 `signed-vc.json` 的内容，然后再次验证它以查看验证失败的情况。

#### 第2步：验证由did-web发行的VC

要验证来自Spruce演示服务器的VC：

    curl https://demo.spruceid.com/get-example-vc > example-vc.json
    

`example-vc.json` 应该类似于：

    {
      "@context": ["https://www.w3.org/2018/credentials/v1"],
      "type": "VerifiableCredential",
      "credentialSubject": {},
      "issuer": "did:web:demo.spruceid.com",
      "issuanceDate": "2021-09-13T18:23:56Z",
      "proof": {
        "type": "Ed25519Signature2018",
        "proofPurpose": "assertionMethod",
        "verificationMethod": "did:web:demo.spruceid.com#_t-v-Ep7AtkELhhvAzCCDzy1O5Bn_z1CVFv9yiRXdHY",
        "created": "2021-09-13T18:23:56.483Z",
        "jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..X5J2jI5j3TPqFO_g6XOlB730WlXJ8mDsfoyLQ4u60MelVosi1Et6V_pB7-zELDggdqZTsKQjSqDodv0m7ui1Bg"
      },
      "expirationDate": "2021-10-13T18:23:56Z"
    }
    

验证VC：

    didkit vc-verify-credential -p assertionMethod < example-vc.json
    

确保没有出现任何检查失败、警告或错误。修改 `example-vc.json` 的内容，然后再次验证它以查看验证失败的情况。要直接解析did-web DID：

    didkit did-resolve did:web:demo.spruceid.com
    

更多信息请访问：

[https://www.sprucekit.dev](https://www.sprucekit.dev)

### 总结

通过前面的简单学习，你已经学习了使用did-key DID发行可验证凭证（VC），并验证它以及通过did-web DID发行的VC的整个过程。通过SpruceKit和DIDKit，你拥有了构建和验证去中心化身份解决方案的强大工具。这只是一个开始，在SpruceID生态系统中还有许多功能和能力等待你探索。一起加油！

> *   [Aleo Twitter](https://twitter.com/aleohq)
>     
> *   [Aleo Discord](https://discord.gg/aleo)
>     
> *   [Aleo 官网](https://www.aleo.org/)
>

---

*Originally published on [Yaakov](https://paragraph.com/@yaakov/spruce-did-kit-aleo)*
