【问题标题】:ZeroMQ - Get user ID from ZeroMQ Auth responseZeroMQ - 从 ZeroMQ 验证响应中获取用户 ID
【发布时间】:2022-01-04 13:02:52
【问题描述】:

在 ZeroMQ 中,在我的情况下更准确地说是 cppzmq,当您使用 ZAP 时, 它对用户完全透明地处理。

但是,如 RFC 中所述:https://rfc.zeromq.org/spec/27/, Auth 服务器可以在响应中发回用户 ID 和一些元数据:

回复消息应由以下消息帧组成:

  • 地址分隔帧,长度应为零。
  • 版本框架,应包含三个八位字节“1.0”。
  • 请求 ID,可能包含不透明的二进制 blob。
  • 状态码,应包含一个字符串。
  • 状态文本,可以包含字符串。
  • 用户ID,应该包含一个字符串。
  • 元数据,可能包含 blob。

再往下一点,就是user id的意思:

user id:这可以在 200 状态的情况下提供用户身份,供应用程序使用。对于其他状态,它应该是空的。

我的问题如下:如何使用 cppzmq 从响应中检索用户 ID?

小代码示例说明我的意思:

void client() {
  zmq::context_t context;
  zmq::socket_t socket (context, zmq::socket_type::req);
  socket.set(zmq::sockopt::zap_domain, "global");
  socket.set(zmq::sockopt::plain_username, "user");
  socket.set(zmq::sockopt::plain_password, "password");

  socket.connect("tcp://127.0.0.1:4242");
  ...
  std::string auth_user_id = /* magic function here */;

}

【问题讨论】:

    标签: zeromq zeromq-auth


    【解决方案1】:

    https://github.com/zeromq/rfc/blob/master/src/spec_27.c 的RFC 存储库中提供了一个最小的空参考实现。此实现演示了服务器通过 inproc:// 与代理处理程序通信,通过 TCP 与外部终端处理程序通信。终端处理程序实现了 PLAIN 身份验证机制。

    【讨论】:

    • 感谢您的回答,但我不确定您是否理解我的问题...我可以很好地使用身份验证,并且它可以正常工作。我的问题是从身份验证请求中获取身份验证答案 metadata
    猜你喜欢
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多