Hyperledger Fabric 如何通过 mspid 管理授权

Hyperledger Fabric how to manage authorization by mspid

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

我打算这样做,通过将 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 的代码吗?

谢谢

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

I am planning of doing it, by storing the msp roles in the blockchain and querying them in the contract to do the validation, and this roles can be stored in the blockchain on the instantiate method.

我觉得你的做法是合理的。以后可以对其进行更改和扩展。

Is there a better way to associate a role to an mspid? Like directly on the certificate?

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

这是我以前用过的快速而肮脏的解决方法:

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