我想对某些方法实现链码级别的访问控制。因此,例如,我希望调用的链码方法只有在执行请求的用户具有与世界状态中请求的资产字段匹配的特定身份时才能执行。
在https://hyperledger-fabric.readthedocs.io/en/release-1.4/chaincode4ade.html,官方文档说:
“Chaincode 可以通过调用 GetCreator() 函数将客户端(提交者)证书用于访问控制决策。此外,Go shim 提供了扩展 API,可从提交者的证书中提取客户端身份,可用于访问控制决策,无论是基于在客户身份本身、组织身份或客户身份属性上。
例如,表示为键/值的资产可能包括客户端的身份作为值的一部分(例如作为指示资产所有者的 JSON 属性),并且只有该客户端可能被授权对键/值进行更新在将来。客户端身份库扩展 API 可在链代码中使用来检索此提交者信息,以做出此类访问控制决策。”
这完美地反映了我的情况:我的资产包含一个字段所有者,我希望只有作为该资产所有者的用户才能对资产执行删除方法,即如果他的身份 - 用户名 - 与所有者字段匹配。
我的问题是官方文档中提供的解决方案描述了使用“客户端身份(cid)库”的可能性(https://github.com/hyperledger/fabric/tree/master/core/chaincode/shim/ext/ cid ) 从证书中提取用户信息。但在我的情况下,我有 Java 和 Javascript 的链码,并且(我认为)我只能使用 GetCreator() 方法,它将用户证书作为字节数组作为输出。
如何从证书中提取我需要的信息?可能吗?是否可以使用我的 Java 和 Javascript 链代码中的 CID 库?