Hyperledger Fabric如何通过mspid管理授权?

问题描述 投票:0回答:1

我想在我的超账本fabric区块链中使用角色来确定一个组织可以做什么,所以,如果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?

谢谢,谢谢

node.js authorization hyperledger-fabric hyperledger-fabric-ca hyperledger-chaincode
1个回答
1
投票

我打算这样做,通过将msp角色存储在区块链中,并在合约中查询它们来做验证,这个角色可以在实例化方法上存储在区块链中。

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

有没有更好的方法把角色关联到mspid上?比如直接在证书上?

在证书中嵌入属性。 就像你说的,我们不能信任组织角色证书上的属性。我们的系统知道组织的根证书,所以只有这些可以作为我们的参考。由于客户证书是用这些根证书签署的,所以我们也可以接触到这些证书的签发人证书。如果我们 执行 组织把一些属性放在那里,这将给我们带来一个解决方案。这种执行发生在入职的时候,由管理员手动验证。显然这是一个不好的方法。因为它是静态的,我们对我们的一些证书动作进行强制执行。习俗 解决方案等。

下面是一个 快刀斩乱麻 我之前使用的解决方法。

在MSP ID上嵌入角色 这其实是一个 快刀斩乱麻 即MSP的ID将被设置为---------------。Org1_xyz 其中x、y和z是不同的角色。你可以很容易地得到客户的MSP ID,并从这里提取组织的角色,这是一个安全的方法,因为MSP ID是由管理员在介绍组织到系统渠道时分配给组织的。这是一个安全的方法,因为MSP ID是由管理员在将一个组织引入系统渠道时分配给该组织的。之后就完全不能更改了,而且这个信息是非常依赖链码逻辑的,MSP ID是在更高层次上定义的。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.