@arcblock/jwt

中文文档
1.30.26发布于 2026/11/05Apache-2.0TypeScriptESM + CJS近 30 天下载 8820

JSON Web Token variant for arcblock DID solutions

原始使用文档
文档目录5 节
  1. Table of Contents
  2. Install
  3. Usage
  4. Between dApp and DID Wallet
  5. Between dApp and dApp

arcblock-jwt

docs Gitter

This library aims to ease the process of handling Did-Auth process between different parts, its implemented according to ABT-DID-Protocol, and can eliminate the threat of middle-man attach if properly used, there are typically 2 use case for the library:

  • dApp <--> dApp: for inter application communication, we provide AppAuthenticator and AppHandlers
  • dApp <--> DID Wallet: for application and wallet communication, we provide WalletAuthenticator and WalletHandlers

Table of Contents

Install

npm install @arcblock/jwt
// or
bun install @arcblock/jwt

Usage

Between dApp and DID Wallet

WalletAuthenticator and WalletHandlers should be used together with @ocap/react-forge.

const { fromRandom } = require('@ocap/wallet');
const { WalletAuthenticator, WalletHandlers } = require('@arcblock/jwt');

// First setup authenticator and handler factory
const wallet = fromRandom().toJSON();
const authenticator = new WalletAuthenticator({
  wallet,
  baseUrl: 'http://wangshijun.natapp1.cc',
  appInfo: {
    description: 'Starter projects to develop web application on forge',
    icon: '/images/[email protected]',
    name: 'Forge Web Starter',
  },
  chainInfo: {
    host: 'http://did-workshop.arcblock.co:8210/api',
    id: 'forge',
  },
});

const handlers = new WalletHandlers({
  authenticator,
  tokenStorage: new MongoStorage({ url: process.env.MONGO_URI }),
});

// Then attach handler to express server
const express = require('express');
const app = express();

// This is required if you want to use dynamic baseUrl inference
app.set('trust proxy', true);

handlers.attach({
  prefix: '/api/did',
  action: 'login',
  claims: {
    profile: () => ({
      fields: ['fullName', 'email'],
      description: 'Please provide your name and email to continue',
    }),
  },
  onAuth: async ({ claims, userDid }) => {
    try {
      const profile = claims.find((x) => x.type === 'profile');
      console.info('login.success', { userDid, profile });
    } catch (err) {
      console.error('login.error', err);
    }
  },
});

// Then your app will have 5 api endpoints that can be consumed by AuthComponent
// - `GET /api/did/login/token` create new token
// - `GET /api/did/login/status` check for token status
// - `GET /api/did/login/timeout` expire a token
// - `GET /api/did/login/auth` create auth response
// - `POST /api/did/login/auth` process login request

Between dApp and dApp

Please note that AppAuthenticator and AppHandlers should be used to sign and verify the message sent between dApps, so there must are both a client and a server.

Initialize authenticator and handlers

const { fromRandom } = require('@ocap/wallet');
const { AppAuthenticator, AppHandlers } = require('@arcblock/jwt');

// First setup authenticator and handler factory
const wallet = fromRandom().toJSON();
const authenticator = new AppAuthenticator(wallet);
const handlers = new AppHandlers(authenticator);

For the server

const express = require('express');
const app = express();

app.post('/api/endpoint', handlers.attach(), (req, res) => {
  console.log('client.appPk', req.appPk);
  console.log('verified payload', req.payload);

  // Sent signed response: sensitive info should not be here
  res.jsonSecure({
    key: 'value',
  });
});

For the client

const axios = require('axios');

const signedPayload = authenticator.sign({
  amount,
  depositorDid,
  depositorPk,
  withdrawer: appAuth.wallet.address,
  merchantId: process.env.MERCHANT_ID,
});

const res = await axios.post('http://example.com/api/endpoint', signedPayload);
const payload = await authenticator.verify(res.data);
if (payload.error) {
  throw new Error(payload.error);
}
// Do something with the payload

版本与发布记录

@arcblock/jwt 共发布 431 个版本,首次发布于 2021/10/28;过去 12 个月发布了 77 个版本。

版本发布日期距今
1.30.26latest2026/11/052 天前
1.30.252026/11/043 天前
1.30.242026/05/145 个月前
1.30.232026/05/135 个月前
1.30.222026/05/135 个月前
1.30.212026/05/135 个月前

关于 @arcblock/jwt 的常见问题

@arcblock/jwt 是什么?

JSON Web Token variant for arcblock DID solutions

如何安装 @arcblock/jwt?

在项目目录运行 npm install @arcblock/jwt,或使用 pnpm add / yarn add / bun add。

@arcblock/jwt 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@arcblock/jwt 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@arcblock/jwt 可以商用吗?

@arcblock/jwt 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@arcblock/jwt 的下载量有多少?

根据 npm 官方下载统计,@arcblock/jwt 在 2026/10/07 – 2026/11/05 这 30 天内被下载 8,820 次,日均约 294 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@arcblock/jwt 还在维护吗?

最新版本 1.30.26 发布于 2026/11/05(2 天前);至今共发布 431 个版本,其中过去 12 个月发布了 77 个;首次发布于 2021/10/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。