本指南提供了一个最小化的分步示例,帮助您在 Node.js 应用程序中设置一个基本的 DID Connect 会话。在本教程结束时,您将拥有一个可以工作的服务器,能够通过用户的 DID 钱包请求其个人资料信息。
1. 安装
首先,您需要安装必要的软件包。该库旨在与 Express.js 等 Web 服务器框架配合使用。您还需要一个存储适配器来管理会话令牌。
安装所需软件包
# 使用 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/walletexpress: 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
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
// 附加 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
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()}`);
});现在,运行该应用程序:
node index.js您的后端现在已准备好处理 DID Connect 会话。要完成整个流程,您需要一个前端来显示二维码。为了快速测试,您可以使用 DID Connect UX 库或将其集成到您的 Web 应用程序中。
后续步骤
恭喜!您已成功设置了一个基本的 DID Connect 服务器。现在您可以探索更多高级功能。