使用作曲家构建实时应用程序

时间:2017-12-13 10:43:16

标签: hyperledger-fabric hyperledger hyperledger-composer

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

用例1) 客户注册为" admin"在申请表上。在这个过程中, 用户名和密码保存在普通数据库中。 现在需要在区块链中创建相同的用户作为参与者" admin"并行使用API​​' s。创建它的完整过程是什么。我们怎样才能实现它?

用例2)另一位客户登录为"正常" user.how我们可以通过身份验证来显示普通用户数据而不是" admin"用户数据。

1 个答案:

答案 0 :(得分:4)

谢谢你的问题。

重点是您的应用程序用户(存储在您提及的正常数据库中)已注册并注册为Composer身份(即通过Fabric Authority of Authority(CA),以及哪些证书发布(因此成为区块链标识,由Composer用于业务网络的CA发布)。这些Composer标识映射到您在Hyperledger Composer中部署的运行时业务网络中的参与者(您的应用程序用户参与者)。所以日常事务从您的应用程序用户,将提交事务(例如,创建资产,更新资产,调用业务事务xyz)作为映射的参与者(并且问责制被追溯到提交它的真实身份)。

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

回答你的问题

1)身份问题(使用API​​)的一个例子就在这里

          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);
        });
从命令行

,您可以使用

列出已发布的身份

composer identity list -c admin@tutorial-network

        $class:      org.hyperledger.composer.system.Identity
          identityId:  9b49f67c262c0ae23e1e0c4a8dc61c4a12b5119df2b6a49fa2e02fa56b8818c3
          name:        usr001
          issuer:      27c582d674ddf0f230854814b7cfd04553f3d0eac55e37d915386c614a5a1de9
          certificate: 
          state:       ISSUED
          participant: resource:org.acme.biznet.Trader#Trader_001

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

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

2)身份验证是正确的吗?用户已在此阶段登录。也许您的意思是访问控制(授权)。最简单的方法是&#39; normal&#39;用户(参与者类型)和&#39; admin&#39;用户(因为您已经定义了管理员)将使用业务网络的ACL规则,这意味着客户只能看到与他们相关的数据以及(如果需要)您想要控制访问权限的参与者用户的类型。但这仅适用于区块链上的数据 - 您显然会为您的普通数据库使用合适的授权策略。