我正在使用Hyperledger Fabric,并在Golang中开发Chaincode。我有以下用例,不确定如何在Fabric中实现这一点。
假设我有Bank1,Bank2和Bank3对等组织。我想设计一个系统,他们分别存储客户信息(客户是银行帐户持有人)。通常,我不希望Bank2对Bank1的客户有访问权-但是,如果客户端以某种方式调用某个函数调用,则bank2应该能够从bank1获取该客户的信息(假设所有银行共享一个频道)
如何通过链码实现类似的功能?
我看过ABAC,我不确定如何更新组织的属性以允许基于执行了操作的特定客户端访问
谢谢
答案 0 :(得分:1)
一种解决方案可能是在区块链之外拥有私人信息,并使每个银行都可以通过API直接从您的链码中查询其私人信息,并在所有通过链码调用共享信息的银行之间建立共享渠道。当然,必须确保所有API只能由自己的银行查询。
另一个无需在您的区块链之外实施的解决方案是使用私有数据收集,这是对1.2版中的Fabric的改进。这里的更多信息:https://hyperledger-fabric.readthedocs.io/en/release-1.2/private-data/private-data.html
更新:
从chaincode调用外部api是否安全?我将如何维护密钥/令牌?
是的,就您保护通信和端点而言,它是安全的。一种简单的解决方案是将您的节点和私有数据存储在同一网络的防火墙内。这样,您就不必担心应用程序内部的安全性。
要使用私有数据实现此功能,可能有一个字符串数组,这些字符串是Client结构中库的标识符,并且客户端可以调用函数以允许更多库,以及当库尝试查询Client时代码是否检查该数组是否包含银行的标识符?
在我看来,您的方向是正确的,但是我将其实现为JSON文件,而不是带有访问规则的数组,并指出对于BankA,BankB可以访问此功能以及此类功能,依此类推,您还可以在信息中设置可见性级别,然后在链码中实现读取和使用该配置的逻辑。在生产中,每个节点都必须具有自己的配置文件,但是对于开发而言,您可以具有包含所有规则的单个配置文件。
更新2:
组织中的某人是否可以而不是通过链码直接“查询”分类帐或读取其状态?
简短的回答:是的,有可能。无论写在区块链中的什么内容,同行的管理员以及任何控制私钥的人都可以读取。但是,这里是架构发挥作用的地方:如果您不需要在区块链中编写任何东西,就不要编写。这取决于您想要区块链的用途。如果只是为了证明已共享信息,则保存必要的信息:“ bankA与bankC共享有关userB的信息”。实际信息不必保存在区块链中。如果您需要将信息保存在区块链中并希望将其保密,那么我认为最好的解决方案是使用私有数据集合,并且请注意,事实上私有数据无需达成共识,因为私有数据被保存在仅在涉及私人交易的对等方/组织中使用方数据库,而不在每个对等方中使用。