在超级账本结构中链下存储客户注册信息的最佳方式是什么



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

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

这样,UUID就可以连接到个人信息,因为UUID也存储在链外,而且它仍然是完全匿名的
但是,在访问链码之前,是否需要通过具有注册和注册功能的Node SDK对用户进行注册和注册,因为没有注册,客户端在网络中就没有身份
如果fabcar示例中的此函数与node SDK中的注册和注册函数相同,我也会感到困惑?

谢谢你的努力,帮助我理解这件事。

fabcar的enroll代码是节点sdk的enroll
换句话说,它们是相同的。

  • 节点sdk/注册
  • fabcar/注册
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上查询/调用链代码,您需要获得fabric客户端权限
假设您将一个特定的用户UUID注册为Fabric的客户端,并通过该客户端调用链代码
在这种情况下,您应该执行的顺序如下。

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

第1步,当首次操作Fabric-CA时,可以通过指定的参数指定管理员ID和密码。根据指定的ID和密码,从Fabric-CA颁发并存储具有管理权限的客户端密钥/证书。(Fabric-CA建议在组织单元中运行,客户端权限取决于组织。)

步骤2,可以通过管理客户端密钥/证书注册新用户。您可能会将UUIDregister作为enrollmentID。注册过程完成后,用户客户端的密钥/证书将通过注册Fabric CA来颁发,并进行存储。

步骤3,链代码通过存储的管理客户端/用户客户端密钥/证书进行查询/调用。当然,只有在客户端获得授权的情况下才能执行,这是在区块链网络中通道的起源块中定义的(即必须在configtxgen过程中设置)

总的来说,如果你观察这个场景,你可以看到这两个过程是分开的。

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

[注意]
如果要查询/调用结构网络的链代码,fabric-client权限是必不可少的。当然,你可以做一些小把戏。例如)

  • 在服务器上注册管理客户端
  • 之后,它的操作与现有的身份验证服务器/资源服务器相同
  • 如果Fabric Network的链码被调用,并且它由现有的身份验证服务器有效,则链码通过预先发布的管理客户端权限执行
  • 这不需要单独的用户客户端注册/管理过程

然而,区块链上的权威机构完全依赖于外部认证机构。

最新更新