我在链代码级别的身份管理存在严重问题,我正在构建一个应用程序,人们可以在此上载他们的教育和工作经验文档,而教育机构和以前的公司可以批准它,我在这样做时遇到了这个问题:
人员是通用参与者,他不依赖任何组织,我想给他一个通用身份,而与组织和msps无关,因为他可以使用任何组织来连接到网络,因为他不保持任何同行。现在,由于我不依赖链代码中的MSP凭据,因为用户可以从任何组织进行访问,因此我如何才能验证调用功能的是同一个人。例如,在以太坊中,我们可以仅使用msg.sender,因为这是用户的以太坊地址,并且是通用标识。
fabric-ca-client节点sdk中没有导入私钥功能,一个人在切换组织或使用其他组织的对等方时如何导入他的旧私钥?
请帮助我了解如何在链码级别实现参与者的通用身份和身份验证
据我了解: MspId + CertId在链码级别为您提供唯一的ID:
更新:我想到了一个解决方案,也许我们可以传递其他信息,即。我可以使用此公共密钥从用户的私钥中获取一条附加的已签名消息,以及一个相应的公钥,以便用链码编写方法来验证消息是否已使用相应的私钥签名并标识用户。该机制不会影响用于调用链码的证书。
任何人都可以验证这种机制吗?
答案 0 :(得分:1)
在以太坊或任何其他区块链中,公共地址不是证明身份的方法。帐户具有公共地址和私钥,您可以使用该私钥对消息进行签名以证明消息来自正确的人。那个私钥可以识别您的身份。
在Hyperledger中,每个用户都必须属于一个组织。这并不是一个随机用户可以参加并更改他们认为合适的数据的系统。证书起着重要的作用,如果证书被吊销,那么就不再有访问该系统的权限。
我建议您考虑使用Hyperledger Indy,因为它可以处理您的确切情况:https://www.hyperledger.org/projects/hyperledger-indy
答案 1 :(得分:1)
对于第二个问题,Node SDK确实允许您通过Client.createUser(opts)
函数使用现有的加密凭据。
对于第一个问题,重要的是要了解Fabric的基本访问控制是在频道级别上完成的,具有两个基本权限: ChannelReaders 和 ChannelWriters < / strong>。通常,渠道成员资格和权限在组织级别。
因此,假设您有5个组织(Org1-Org5)在运行同级,并且使用单个通道 channel1 。您可以将Org1-Org5添加为通道成员,并使用默认的访问控制,这意味着所有组织都具有对该通道的读/写访问权限。然后,您将在 channel1 上实例化您的链码。此时,任何由Org1-Org5中的任何一个颁发证书/凭证的客户端都可以在Org1-Org5中已加入channel1
并具有ClientOrg
的任何对等方上调用 channel1 上的链码。已安装的链码。
另一种选择是创建一个不同的组织(我们将其称为ClientOrg
),该组织为所有客户端颁发证书(Org1-Org5仅向其对等节点和管理员颁发身份)。您可以将ClientOrg
添加到您的频道,然后客户端也可以调用链码。我还要确保对链码的认可政策不包括ORA-01722: invalid number #time
。