Hyperledger Fabric 文档

4.7.8 Hyperledger Fabric - 应用程序开

2019-12-19  本文已影响0人  furnace

应用程序开发 - 应用程序设计元素 - 钱包

钱包包含一组用户身份。用户运行的应用程序在连接到通道时会选择这些身份之一。结合 MSP 使用此身份确定对诸如帐本之类的通道资源的访问权限。

在本主题中,我们将介绍:

1. 场景

当应用程序连接到诸如 PaperNet 之类的网络通道时,它会选择一个用户身份来进行连接,例如 ID1。通道 MSP 将 ID1 与特定组织内的角色相关联,该角色最终将确定应用程序对通道资源的权利。例如,ID1 可能会将用户标识为可以读写账本的 MagnetoCorp 组织成员,而 ID2 可能会标识 MagnetoCorp 中可以向联盟添加新组织的管理员。

image

Isabella 和 Balaji 这两个用户拥有包含不同身份的钱包,可用于连接到不同的网络通道 PaperNet 和 BondNet。

考虑两个用户的例子;MagnetoCorp 的 Isabella 和 DigiBank 的 Balaji。Isabella 将使用 App 1 在 PaperNet 中调用一个智能合约,在 BondNet 中调用另一个智能合约。同样,Balaji 将使用 App 2 调用智能合约,但仅限于 PaperNet。(应用程序很容易访问其中的多个网络和多个智能合约。)

注意:

2. 类型

根据其存储身份的钱包有不同类型:

image

钱包的四种不同类型:文件系统,内存,硬件安全模块 (Hardware Security Module, HSM) 和 CouchDB。

3. 结构

单个钱包可以保存多个身份,每个身份由特定的证书颁发机构颁发。每个身份具有一个标准结构,包括描述性标签,一个包含公钥,私钥和某些特定于 Fabric 的元数据的 X.509 证书。不同的钱包类型将此结构适当地映射到其存储机制。

[图片上传失败...(image-4374ca-1576754700042)]

Fabric 钱包可以使用由不同证书颁发机构颁发的证书来保存多个身份。身份包括证书,私钥和结构元数据。

有两种关键的类方法可以简化钱包和身份的管理:

const identity = X509WalletMixin.createIdentity('Org1MSP', certificate, key);

await wallet.import(identityLabel, identity);

请参阅 X509WalletMixin.createIdentity() 方法 如何创建具有元数据 Org1MSP,证书和私钥的身份。查看 wallet.import() 如何使用特定的 identityLabel 将此身份添加到钱包。

网关类仅需要为身份设置 mspid 元数据 – 在上面的示例中为 Org1MSP。当前,它使用此值从 连接配置文件 中识别特定的对端节点,例如,当请求特定的通知 策略 时。在 DigiBank 网关文件 networkConnection.yaml 中,查看 Org1MSP 通知将如何与 peer0.org1.example.com 关联:

organizations:
  Org1:
    mspid: Org1MSP

    peers:
      - peer0.org1.example.com

你确实不需要担心不同钱包类型的内部结构,但是如果你有兴趣,请导航到商业票据示例中的用户身份文件夹:

magnetocorp/identity/user/isabella/
                                  wallet/
                                        User1@org1.example.com/
                                                              User1@org.example.com
                                                              c75bd6911aca8089...-priv
                                                              c75bd6911aca8089...-pub

你可以检查这些文件,但是如上所述,使用 SDK 可以更轻松地操作这些数据。

4. 运作方式

不同的钱包类派生自一个通用的 Wallet 基类,该基类提供一组标准的 API 来管理身份。这意味着可以使应用程序独立于底层钱包存储机制。例如,文件系统和 HSM 钱包的处理方式非常相似。

image

钱包遵循生命周期:可以创建或打开钱包,并且可以读取,添加,删除和导出身份。

应用程序可以根据简单的生命周期使用钱包。可以打开或创建钱包,然后可以添加,读取,更新,删除和导出身份。花一些时间在 JSDOC 中的不同 Wallet 方法上,看看它们如何工作。商业票据教程在 addToWallet.js 中提供了一个很好的示例:

const wallet = new FileSystemWallet('../identity/user/isabella/wallet');

const cert = fs.readFileSync(path.join(credPath, '.../User1@org1.example.com-cert.pem')).toString();
const key = fs.readFileSync(path.join(credPath, '.../_sk')).toString();

const identityLabel = 'User1@org1.example.com';
const identity = X509WalletMixin.createIdentity('Org1MSP', cert, key);

await wallet.import(identityLabel, identity);

注意:

这就是你需要了解的所有钱包信息。你已经了解了它们如何保留应用程序代表用户使用的身份来访问 Fabric 网络资源。根据你的应用程序和安全需求,可以使用不同类型的钱包,并且有一组简单的 API 可以帮助应用程序管理钱包及其中的身份。

Reference

项目源代码

项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
上一篇下一篇

猜你喜欢

热点阅读