我正在尝试在链码级别动态限制成员的调用访问,并在tutorial中找到了此方法 “ stub.GetCallerCertificate”,但出现错误。
错误:stub.GetCallerCertificate未定义(类型shim.ChaincodeStubInterface没有字段或方法GetCallerCertificate)
您能告诉我我在代码中犯了什么错误吗?如果可能,请提供一些工作示例,以限制对链式代码级别的成员的访问(仅用于调用事务,就像牢固地检查msg.sender一样)?
Chaincode语言:转到</ p>
代码:
xx, err1 := stub.GetCallerCertificate()
if err1 != nil {
matchLogger.Info(err1)
}
matchLogger.Info("Cert ----")
matchLogger.Info(string(xx))
答案 0 :(得分:1)
GetCallerCertificate
可能是Hyperledger Fabric 0.6的api。在Hyperledger架构V1中,您可以在存根上使用GetCreator
调用,也可以使用在Hyperledger架构文档的this section中引用的ClientIdentity
库。
基于属性的访问控制只是执行访问控制的一种方式。您可以通过其他方式进行操作,包括利用cid库允许您访问的证书信息。
答案 1 :(得分:0)
这是我从node.js获得的示例,可能会对您有所帮助。
async function getInvokerID(stub) {
let cid=new ClientIdentity(stub)
let id = cid.getID(); // X509 Certificate invoker is in CN form
console.log(id)
let attributeValue=cid.getAttributeValue("attributeName")
console.log(attributeValue)
let CN = id.substring(id.indexOf("CN=") + 3, id.lastIndexOf("::"));
return attributeValue;
}