我想在我的超账本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?
谢谢,谢谢
我打算这样做,通过将msp角色存储在区块链中,并在合约中查询它们来做验证,这个角色可以在实例化方法上存储在区块链中。
我认为你的方法是合理的。以后还可以进行修改和扩展。
有没有更好的方法把角色关联到mspid上?比如直接在证书上?
在证书中嵌入属性。 就像你说的,我们不能信任组织角色证书上的属性。我们的系统知道组织的根证书,所以只有这些可以作为我们的参考。由于客户证书是用这些根证书签署的,所以我们也可以接触到这些证书的签发人证书。如果我们 执行 组织把一些属性放在那里,这将给我们带来一个解决方案。这种执行发生在入职的时候,由管理员手动验证。显然这是一个不好的方法。因为它是静态的,我们对我们的一些证书动作进行强制执行。习俗 解决方案等。
下面是一个 快刀斩乱麻 我之前使用的解决方法。
在MSP ID上嵌入角色 这其实是一个 快刀斩乱麻 即MSP的ID将被设置为---------------。Org1_xyz
其中x、y和z是不同的角色。你可以很容易地得到客户的MSP ID,并从这里提取组织的角色,这是一个安全的方法,因为MSP ID是由管理员在介绍组织到系统渠道时分配给组织的。这是一个安全的方法,因为MSP ID是由管理员在将一个组织引入系统渠道时分配给该组织的。之后就完全不能更改了,而且这个信息是非常依赖链码逻辑的,MSP ID是在更高层次上定义的。
依赖于注册证书的内容,确实会对签发证书的CA引入很多信任。 我知道这是基于属性的访问控制(ABAC)背后的想法,在某些情况下会奏效,但信任问题很重要,因为任何CA都可以用任意的 "角色 "签发证书。 我认为处理这个问题的唯一真正的方法是在Chaincode中维护一个你想授予某些功能访问权的身份列表。 基本上创建你自己的访问控制列表,并在链上维护。