You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Composer REST Server自定义认证配置及数据库对接咨询

Composer REST Server 自定义认证策略实操指南

先给你吃颗定心丸:你的理解完全正确!采用自定义认证策略时,确实需要你自己处理用户凭证捕获→数据库校验→返回有效token这整套流程,REST Server会依赖你返回的结果来处理后续的请求授权。

核心流程拆解

自定义策略本质上是让你接管认证逻辑,具体步骤是:

  • 捕获请求中的用户凭证:比如前端传来的用户名密码,或者放在Authorization头里的凭证信息,这些都会被REST Server传递到你的自定义策略函数中
  • 数据库校验合法性:你需要自己对接数据库,查询用户信息并验证凭证(比如密码哈希匹配、账号状态正常等)
  • 返回标准格式的认证结果:校验通过后,返回包含token和用户身份信息的对象,REST Server会用这个token来识别后续请求的用户

数据库对接实操

因为Composer REST Server是基于Node.js开发的,所以你可以用任何Node.js支持的数据库驱动来对接,比如MySQL、PostgreSQL、MongoDB都可以。这里举个MySQL的简单示例:

  1. 先安装依赖:
npm install mysql2 bcryptjs jsonwebtoken
  1. 在自定义策略文件中编写校验逻辑:
const mysql = require('mysql2/promise');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');

// 数据库配置
const dbConfig = {
  host: 'localhost',
  user: 'db_user',
  password: 'db_password',
  database: 'composer_auth'
};

// 自定义认证函数,必须导出这个函数
module.exports = async function(request, callback) {
  try {
    // 从请求中获取凭证(这里假设前端用Basic Auth传用户名密码)
    const authHeader = request.headers.authorization;
    if (!authHeader || !authHeader.startsWith('Basic ')) {
      return callback(new Error('Invalid authorization header'));
    }

    // 解码用户名密码
    const base64Credentials = authHeader.split(' ')[1];
    const credentials = Buffer.from(base64Credentials, 'base64').toString('ascii');
    const [username, password] = credentials.split(':');

    // 连接数据库查询用户
    const connection = await mysql.createConnection(dbConfig);
    const [rows] = await connection.execute('SELECT id, username, password_hash FROM users WHERE username = ?', [username]);
    await connection.end();

    if (rows.length === 0) {
      return callback(new Error('User not found'));
    }

    const user = rows[0];
    // 校验密码哈希
    const isPasswordValid = await bcrypt.compare(password, user.password_hash);
    if (!isPasswordValid) {
      return callback(new Error('Invalid password'));
    }

    // 生成JWT token,密钥要保密,最好用环境变量
    const token = jwt.sign(
      { userId: user.id, username: user.username },
      process.env.AUTH_SECRET_KEY,
      { expiresIn: '24h' }
    );

    // 返回REST Server能识别的格式
    callback(null, {
      token: token,
      user: {
        id: user.id, // 这个ID必须和Fabric网络中注册的用户ID一致!
        username: user.username
        // 可以添加自定义字段,比如roles: ['admin', 'member']
      }
    });
  } catch (error) {
    callback(error);
  }
};

⚠️ 重要提醒:绝对不要在数据库中存储明文密码,一定要用bcrypt这类哈希算法加密后存储,校验时用bcrypt.compare匹配。

REST Server识别的返回格式要求

你的自定义策略函数必须返回一个包含以下两个字段的对象,否则REST Server会拒绝认证:

  • token:字符串类型,后续请求需要将这个token放在Authorization: Bearer <token>头中
  • user:对象类型,必须包含id字段(这个ID要和Hyperledger Fabric网络中已经注册的用户身份ID对应,否则后续调用链码会失败),其他自定义字段(比如username、roles)可以按需添加

正确的返回示例:

{
  token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJ1c2VyMTIzIiwidXNlcm5hbWUiOiJrYXJsLW5lbHNvbiIsImlhdCI6MTY5NjE1MzQwMCwiZXhwIjoxNjk2MjM5ODAwfQ.SW9kX2FzZHNhZGZhc2RmYXNkZmFzZA',
  user: {
    id: 'user123',
    username: 'karlnelson',
    roles: ['network_admin']
  }
}

启动REST Server时指定自定义策略

最后,启动REST Server时需要加上认证相关的参数,指定你的自定义策略文件:

composer-rest-server -c admin@your-business-network -a true -t custom -f ./path/to/your-custom-auth.js

参数说明:

  • -a true:启用认证
  • -t custom:指定认证类型为自定义策略
  • -f:指定自定义策略文件的路径

内容的提问来源于stack exchange,提问作者Karl Nelson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:51:24