跳到主要内容

快速入门

本指南提供了一个最小化的分步示例,帮助您在 Node.js 应用程序中设置一个基本的 DID Connect 会话。在本教程结束时,您将拥有一个可以工作的服务器,能够通过用户的 DID 钱包请求其个人资料信息。

1. 安装

首先,您需要安装必要的软件包。该库旨在与 Express.js 等 Web 服务器框架配合使用。您还需要一个存储适配器来管理会话令牌。

安装所需软件包

bash
# 使用 npm
npm install express @arcblock/did-connect-js @arcblock/did-connect-storage-nedb @ocap/wallet

# 使用 pnpm
pnpm install express @arcblock/did-connect-js @arcblock/did-connect-storage-nedb @ocap/wallet
  • express: Web 服务器框架。
  • @arcblock/did-connect-js: 用于处理 DID Connect 会话的主库。
  • @arcblock/did-connect-storage-nedb: 一个用于会话令牌的简单的基于文件的存储适配器。也提供其他适配器。
  • @ocap/wallet: 一个用于创建和管理 DID 钱包的库,我们将用它来为我们的应用程序创建一个身份。

2. 初始化服务器

现在,让我们在一个 index.js 文件中为 DID Connect 设置核心组件。您将要使用的两个主要类是 WalletAuthenticator 和 WalletHandlers。

  • WalletAuthenticator: 管理您的应用程序身份,并负责创建和签署身份验证请求。
  • WalletHandlers: 提供一组 Express.js 中间件,用于处理整个 DID Connect 会话生命周期。

以下是初始设置:

index.js

javascript
const express = require('express');
const { fromRandom } = require('@ocap/wallet');
const SimpleStorage = require('@arcblock/did-connect-storage-nedb');
const { WalletAuthenticator, WalletHandlers } = require('@arcblock/did-connect-js');

// 1. 为您的应用程序创建一个钱包
// 此钱包代表您的应用程序的身份。
// 在实际应用中,您应该持久化并重用此钱包。
const wallet = fromRandom();

// 2. 配置 WalletAuthenticator
const authenticator = new WalletAuthenticator({
  wallet, // 应用程序的钱包
  baseUrl: 'http://localhost:3000', // 您的应用程序的公共 URL
  appInfo: {
    name: 'My First DID Connect App',
    description: 'A simple app to demonstrate DID Connect.',
    icon: 'https://arcblock.oss-cn-beijing.aliyuncs.com/images/wallet-round.png', // 您的应用程序徽标的 URL
  },
  chainInfo: {
    host: 'https://babel.arcblock.io/api',
    id: 'babel',
  },
});

// 3. 配置 WalletHandlers
const handlers = new WalletHandlers({
  authenticator,
  tokenStorage: new SimpleStorage({ dbPath: './auth.db' }), // 会话令牌的存储
});

// 4. 创建一个 Express 应用
const app = express();

// 如果未明确设置 baseUrl,则需要此项进行动态推断
app.set('trust proxy', true);

// ... 在下一步中附加处理程序

// 5. 启动服务器
const port = 3000;
app.listen(port, () => {
  console.log(`Server started on http://localhost:${port}`);
  console.log(`Application DID: ${wallet.toAddress()}`);
});

3. 处理连接

在配置好身份验证器和处理程序后,最后一步是将 DID Connect 端点附加到您的 Express 应用程序。这是通过使用 handlers.attach() 方法完成的,您可以在其中定义要请求的特定声明以及在成功验证后执行的回调。

在 app.listen() 之前,将以下代码添加到您的 index.js 文件中:

index.js

javascript
// 附加 DID Connect 会话处理程序
handlers.attach(app, {
  // 此身份验证操作的唯一名称
  action: 'profileLogin',

  // 定义您想从用户那里请求的信息
  claims: {
    profile: () => ({
      fields: ['fullName', 'email'],
      description: '请提供您的姓名和电子邮件以登录。',
    }),
  },

  // 用户在其钱包中批准请求后,将执行此回调
  onAuth: async ({ userDid, claims }) => {
    // `userDid` 是已连接用户的 DID。
    // `claims` 是一个包含用户提交信息的数组。
    const profile = claims.find((x) => x.type === 'profile');
    console.log('Login successful!');
    console.log('User DID:', userDid);
    console.log('User Profile:', profile);
  },
});

4. 完整代码

以下是您的 index.js 文件的完整、可运行的代码。您可以保存并直接运行它。

index.js

javascript
const express = require('express');
const { fromRandom } = require('@ocap/wallet');
const SimpleStorage = require('@arcblock/did-connect-storage-nedb');
const { WalletAuthenticator, WalletHandlers } = require('@arcblock/did-connect-js');

// 1. 为您的应用程序创建一个钱包
const wallet = fromRandom();

// 2. 配置 WalletAuthenticator
const authenticator = new WalletAuthenticator({
  wallet,
  baseUrl: 'http://localhost:3000',
  appInfo: {
    name: 'My First DID Connect App',
    description: 'A simple app to demonstrate DID Connect.',
    icon: 'https://arcblock.oss-cn-beijing.aliyuncs.com/images/wallet-round.png',
  },
  chainInfo: {
    host: 'https://babel.arcblock.io/api',
    id: 'babel',
  },
});

// 3. 配置 WalletHandlers
const handlers = new WalletHandlers({
  authenticator,
  tokenStorage: new SimpleStorage({ dbPath: './auth.db' }),
});

// 4. 创建一个 Express 应用并附加处理程序
const app = express();
app.set('trust proxy', true);

handlers.attach(app, {
  action: 'profileLogin',
  claims: {
    profile: () => ({
      fields: ['fullName', 'email'],
      description: '请提供您的姓名和电子邮件以登录。',
    }),
  },
  onAuth: async ({ userDid, claims }) => {
    const profile = claims.find((x) => x.type === 'profile');
    console.log('Login successful!');
    console.log('User DID:', userDid);
    console.log('User Profile:', profile);
  },
});

// 5. 启动服务器
const port = 3000;
app.listen(port, () => {
  console.log(`Server started on http://localhost:${port}`);
  console.log(`Application DID: ${wallet.toAddress()}`);
});

现在,运行该应用程序:

bash
node index.js

您的后端现在已准备好处理 DID Connect 会话。要完成整个流程,您需要一个前端来显示二维码。为了快速测试,您可以使用 DID Connect UX 库或将其集成到您的 Web 应用程序中。

后续步骤

恭喜!您已成功设置了一个基本的 DID Connect 服务器。现在您可以探索更多高级功能。