如何使用 clrzmq4 读取经过 ZAP 身份验证的对等体的 client_key?

How to read the client_key of a ZAP authenticated peer using clrzmq4?

我试图实现的目标是让每个连接的对等点都有一个唯一的 ID(不需要对等点自己设置它——我不想相信用户提供的输入!)。我正在使用 CURVEZAP 来验证客户端。每个客户端都有自己的密钥对,这意味着每个客户端都有一个唯一的 client_key 与之关联。我知道客户端有一个 client_key 关联,因为在将 VERBOSE 选项传递给 ZAP 处理程序时它被打印到标准输出。基本上,我使用的是 clrzmq4 提供的 ironhouse example。 这是我指的输出:

I: zauth: ZAP request mechanism=CURVE ipaddress=127.0.0.1
I: zauth: - allowed (CURVE) client_key=xyRFGwnIzeEWk@tRBISoX-Pe<HDYGJt4!9k&q750
I: zauth: - ZAP reply status_code=200 status_text=OK

当在此套接字上接收到消息时,我知道连接的对等点已通过正确的身份验证,但我无法分辨是谁。我如何阅读 client_key?标准的ZeroMQ API中有一个方法叫做zmq_msg_gets, I found references to it in the clrzmq4项目,但是我不知道怎么用。

编辑zmq_msg_gets 的 ZeroMQ API 文档明确指出此消息用于获取经过 zap 身份验证的用户 ID。请参阅“示例”部分。

ZFrameclass提供了一个方法叫GetOption,你可以找到定义here。 属性 名称必须是“User-Id”。确保不要使用对我不起作用的第一帧(我认为这是由于第一帧是 RouterId,这是由 Router 套接字添加的帧)。假设您的 ZMessage 变量称为“消息”,您可以使用以下代码检索 User-Id:

var userId = message[1].GetOption("User-Id");