Hyperledger fabric 使用composer构建实时应用程序

Hyperledger fabric 使用composer构建实时应用程序,hyperledger-fabric,hyperledger,hyperledger-composer,Hyperledger Fabric,Hyperledger,Hyperledger Composer,考虑一个场景:我正在构建企业Web应用程序,其中部分数据驻留在区块链和普通数据库中。这是授权的应用程序。 .bna有两种类型的参与者管理员和普通用户 用例1) 客户在申请表上注册为“管理员”。在这个过程中,, 用户名和密码保存在普通数据库中。 现在,需要使用API在区块链中创建与参与者“管理员”相同的用户。创建它的完整过程是什么。我们如何才能做到这一点 用例2)另一个客户以“普通”用户身份登录。我们如何验证以显示普通用户数据而不是“管理员”用户数据。谢谢您的提问 主要的一点是,您的应用程序用户(

考虑一个场景:我正在构建企业Web应用程序,其中部分数据驻留在区块链和普通数据库中。这是授权的应用程序。 .bna有两种类型的参与者管理员和普通用户

用例1) 客户在申请表上注册为“管理员”。在这个过程中,, 用户名和密码保存在普通数据库中。 现在,需要使用API在区块链中创建与参与者“管理员”相同的用户。创建它的完整过程是什么。我们如何才能做到这一点


用例2)另一个客户以“普通”用户身份登录。我们如何验证以显示普通用户数据而不是“管理员”用户数据。

谢谢您的提问

主要的一点是,您的应用程序用户(存储在您提到的“普通”数据库中)注册并登记为作曲家身份(即通过结构授权证书(CA),并为其颁发证书(从而成为区块链身份,由作曲家用于商业网络的CA颁发)。这些Composer标识映射到您在Hyperledger Composer中部署的运行时业务网络中的参与者(您的应用程序用户参与者)。因此,来自应用程序用户的日常事务将作为映射参与者提交事务(例如创建资产、更新资产、调用业务事务
xyz
)(责任可以追溯到提交报告的真实身份)

不确定您想如何实现它,但您显然可以使用REST API(从建模、部署的网络生成,并由您的应用程序和应用程序架构使用),或者在应用程序用户注册后立即使用JS API发生的事情。这取决于您

回答你的问题

1) 这里是身份问题的一个示例(使用API)

显然,您可以继续为这些参与者(能够在商业网络上提交交易)创建名片(一次性流程),以便他们可以安全地与那些(从他们的应用程序)将在区块链上交易的应用程序用户共享(例如,作为经过身份验证/注册的应用程序用户与业务网络交互,比如使用RESTAPI)

我不完全确定您的“应用程序管理员”用户将如何翻译,但您可以在Composer中将其作为业务网络中的参与者类型建模为应用程序管理员。这实际上是关于您为什么要在业务网络中区分参与者,以及客户用户(无论是通过您的应用程序还是其他方式)应查看他们何时访问该区块链分类账数据-例如,他们执行的交易历史记录。特定客户管理员可能能够按应用程序用户查看该客户的交易历史记录


2) 身份验证是正确的词吗?用户已在此阶段登录。您可能指的是访问控制(授权)。最简单的方法是“普通”用户(参与者类型)和“管理员”用户(如您定义的管理员)使用业务网络的ACL规则,这意味着客户只能查看与其相关的数据,并且(如有必要)您希望控制访问权限的参与者用户类型。但这仅适用于区块链上的数据-您显然会对您的正常数据库使用合适的授权策略。

谢谢Paul。这很有帮助
          var businessNetwork = new BusinessNetworkConnection();
          return businessNetwork.connect('admin@tutorial-network')
            .then(() => {
                return businessNetwork.issueIdentity('org.acme.biznet.Trader#Trader_001', 'usr001')
            })
            .then((result) => {
                console.log(`userID = ${result.userID}`);
                console.log(`userSecret = ${result.userSecret}`);
            })
                .catch((error) => {
                console.error(error);
            });

            var businessNetwork = new BusinessNetworkConnection();

        // Connect as the identity

        return businessNetwork.connect('usr001@tutorial-network')
        .then(() => {
          return businessNetwork.ping();
        })
        .then((result) => {
          console.log(`participant = ${result.participant ? result.participant : '<no participant found>'}`);
        })
        .catch((error) => {
          console.error(error);
        });
        $class:      org.hyperledger.composer.system.Identity
          identityId:  9b49f67c262c0ae23e1e0c4a8dc61c4a12b5119df2b6a49fa2e02fa56b8818c3
          name:        usr001
          issuer:      27c582d674ddf0f230854814b7cfd04553f3d0eac55e37d915386c614a5a1de9
          certificate: 
          state:       ISSUED
          participant: resource:org.acme.biznet.Trader#Trader_001