Hyperledger Fabric 如何通过 mspid 管理授权



我想使用角色来确定组织在我的超级账本结构区块链中可以做什么,因此,如果 org1 是分销商,它可以调用合约 1 和合约 2,但具有审计员角色的 org2 只能调用合约 2。

我计划这样做,通过将msp角色存储在区块链中并在合约中查询它们来进行验证,并且该角色可以存储在实例化方法上的区块链中。

像这样:

public async contract1(ctx: context) {
const cid = ctx.clientIdentity;
const role = await ctx.stub.getState(cid);
if (role === 'auditor') {
throw new Error('An Auditor can not issue a transference');
}
....
return response;
}

是否有更好的方法将角色关联到 mspid?喜欢直接在证书上?但是,如果组织管理CA,我怎么能保证他们不给自己超能力、超级角色呢?还是我应该直接检查每个 mspID 的代码?

谢谢

我计划通过将msp角色存储在区块链中来做到这一点 并在合同中查询它们以进行验证,以及此角色 可以存储在区块链上的实例化方法中。

我认为你的方法是合理的。它稍后可以进行更改和扩展。

是否有更好的方法将角色关联到 mspid?直接喜欢 在证书上?

在证书中嵌入属性:如您所提到的,我们不能信任组织角色上的证书属性。我们的系统知道组织的根证书,因此只有这些才能成为我们此类解决方案的参考。由于客户端证书是使用这些根证书来叹息的,因此我们也可以访问这些证书的颁发者证书。如果我们强制组织将一些属性放在那里,这将给我们带来一个解决方案。此强制措施在载入期间进行,并由管理员手动验证。显然,这是一种糟糕的方法。因为它是静态的,并且我们对自定义解决方案等强制实施一些证书操作。

这是我之前使用过的快速而肮脏的解决方案:

在 MSP ID 上嵌入角色:这确实是一个快速而肮脏的解决方案,即 MSP ID 将设置为Org1_xyz其中 x、y 和 z 是不同的角色。您可以轻松获取客户的 MSP ID 并从此处提取组织的角色。这是一种安全的方法,因为 MSP ID 是在将组织引入系统通道期间由管理员分配给组织的。之后,它根本不是可更改的,而且这是信息非常依赖于链码逻辑,其中 MSP ID 位于更高级别的定义中。

依赖注册证书的内容确实会给颁发证书的 CA 带来很多信任。 我知道这是基于属性的访问控制(ABAC(背后的想法,并且在某些情况下会起作用,但是信任问题很重要,因为任何CA都可以颁发具有任意"角色"的证书。 我认为处理这个问题的唯一真正方法是在链码中维护一个你想要授予某些功能访问权限的身份列表。 基本上创建自己的访问控制列表,这些列表在链上维护。

最新更新