在 hyperledger fabric 中链下存储客户注册信息的最佳方式是什么

What is the best way of storing the clients registration information off-chain in hyperledger fabric

我想使用 Hyperledger 结构网络创建一个应用程序,但我不确定处理和存储客户信息的最佳方式是什么。对我来说,重要的是个人信息存储在链外,以免降低网络速度。
现在这是我考虑的过程:

  1. 客户在前端填写表格
  2. 应用程序(后端)生成唯一的 UUID
  3. (正在注册钱包中的UUID)不确定这一步
  4. 调用链码将 UUID 保存在状态数据库中
  5. UUID 和用户名、电子邮件、密码等个人信息被加密并保存在 postgreSQL 等链下数据库中。

这样 UUID 就可以连接到个人信息,因为 UUID 也存储在链外并且仍然是完全匿名的。
但是,在能够访问链代码之前,是否有必要通过 Node SDK 使用 enroll and register function 注册和注册用户,因为如果没有注册,网络中的客户端就没有身份?
如果 fabcar 样本中的 function 与节点 SDK 中的 enroll and register function 相同,我也很困惑?

感谢您的努力,帮助我理解了这件事。

fabcar的enroll代码是node-sdk的enroll
换句话说,它们是相同的

const secret = await ca.register({
    affiliation: 'org1.department1',
    enrollmentID: 'appUser',
    role: 'client'
}, adminUser);
const enrollment = await ca.enroll({
    enrollmentID: 'appUser',
    enrollmentSecret: secret
});

首先说一下fabric的SDK。
一般来说,为了在fabric SDK上query/invoke chaincode,需要获得fabric client权限。
假设你注册了一个特定的用户 UUID 作为 Fabric 的 Client 并通过那个 Client 调用链码。
在这种情况下,您应该执行的顺序如下。

  1. 将管理客户端注册到 Fabric-CA
  2. 通过 admin-client 将 user-client 注册到 Fabric-CA
  3. 管理员客户端或用户客户端调用的链码 Fabric-Network(peers, orderers)

步骤1,首次操作Fabric-CA时,可以通过指定参数指定管理员ID和密码。根据指定的 ID 和密码,从 Fabric-CA 发出并存储具有管理员权限的客户端 key/certificate。 (Fabric-CA建议在组织单元内操作,客户端权限依赖组织。)

步骤2,新用户可以通过admin-client注册key/certificate。可能你会 register UUID 为 enrollmentID。 注册过程完成后,用户客户端的 key/certificate 通过注册 Fabric-CA 发出,并存储。

step 3,chaincode是query/invoke通过存储的admin-client/user-clientkey/certificate。当然,只有在客户端授权的情况下才能执行,这是在区块链网络中通道的创世块中定义的(即必须在configtxgen过程中设置)

总的来说,如果你看场景,你可以看到两个进程分开了。

  1. 如果是单独的认证服务器
  • 建立一个新的数据库(用于链下)。
  • 注册会员时,用户信息(UUID,密码...)存储在数据库中
  • 通过 fabric 用户-客户端注册过程,密钥和证书存储在文件系统或数据库中。
  • 登录时,根据新建的数据库进行鉴权
  • 在根据身份验证程序验证用户有效性的同时调用 fabric 网络的链代码时,它基于映射的密钥和证书进行操作。
  1. 在 Hyperledger Fabric 中使用组织作为身份验证服务器时
  • 用户信息通过Fabric提供的PDC(Private Data Collection)存储在区块链中。
  • PDC是一种链下技术,只有预定义的组织共享数据。
  • 通过此功能,所有参与通道的组织都可以进行数据的有效性检查,但只有获得权限的组织才能view/edit真正的敏感信息。
  • 最终流程和程序是一样的,但是所有的资源都可以在区块链上进行管理。 (与所有技术一样,它们各有利弊,需要权衡取舍。)

[注意]
如果你要 query/invoke fabric 网络的链码,fabric-client 权限是必不可少的。 当然,你可以做一些小技巧。 例如)

  • 在服务器上注册管理客户端。
  • 之后,它的操作与现有的身份验证server/resource服务器相同。
  • 如果调用Fabric Network的chaincode,并且通过现有的认证服务器有效,则通过预先下发的admin-client权限执行chaincode。
  • 这不需要单独的用户客户端 registration/management 过程。

但是,区块链上的权限完全依赖于外部的认证机构。