Hyperledger Fabric多通道环境启动Composer REST服务器遇MSP身份验证错误求助
从你给出的错误日志来看,核心问题非常明确:
event message must be properly signed by an identity from the same organization as the peer: [failed deserializing event creator: [Expected MSP ID Org2MSP, received Org1MSP]]
简单来说,你启动composer-rest-server时用的是Org1MSP下的身份,但这个Rest Server尝试连接的Peer属于Org2MSP,而Fabric的事件验证机制要求事件发送者的身份必须和Peer同属一个组织,所以触发了这个错误。下面是针对性的解决步骤:
1. 核对连接配置文件的匹配性
先检查你用来启动Rest Server的连接配置文件(.connection.json):
- 找到
peers字段下你要连接的Peer条目,确认它的mspId是Org2MSP(和Peer所属组织一致) - 再检查
client字段里的身份配置,确保你使用的用户身份属于同一个MSP(也就是Org2MSP)
2. 启动Rest Server时指定对应组织的身份
启动composer-rest-server时,明确指定目标组织的用户身份,避免默认身份不匹配:
composer-rest-server -c your-business-network-name@your-connection-profile -u org2-user -p org2-user-password -n never -w true
这里的org2-user必须是你在Org2MSP下注册并颁发过的有效身份。
3. 重新生成并导入匹配的身份卡片
如果你的现有身份卡片存在MSP不匹配的问题,重新生成对应组织的身份:
# 为Org2MSP颁发新身份 composer identity issue -c your-connection-profile -u org2-new-user -a "resource:org.example.Org2Participant#org2-participant-id" -o your-business-network-name # 导入新生成的身份卡片 composer card import -f org2-new-user@your-business-network-name.card
之后用这个新卡片启动Rest Server即可。
4. 检查Peer的环境配置
确认Peer启动时的环境变量是否指向正确的MSP目录:
# 进入Peer所在容器或终端,执行以下命令 echo $CORE_PEER_MSPCONFIGPATH
这个路径应该指向Org2的MSP目录(比如/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp),如果不对,需要调整Peer的启动参数或环境变量。
5. 验证通道的访问控制规则
检查业务网络的.acl文件,确保Org2的身份有权限订阅通道事件:
添加或确认类似如下的规则:
rule Org2EventSubscriber { description: "Allow Org2 participants to subscribe to events" participant: "org.example.Org2Participant" operation: SUBMIT resource: "event:**" action: ALLOW }
更新业务网络后重新部署,确保规则生效。
内容的提问来源于stack exchange,提问作者Tejal tandale

