ZeroMQ – Obtener el ID de usuario de la respuesta de autenticación de ZeroMQ.
En ZeroMQ, más precisamente en mi caso con cppzmq, cuando se usa ZAP, se maneja de forma completamente transparente para el usuario.
Sin embargo, según se documenta en el RFC: https://rfc.zeromq.org/spec/27/, el servidor de autenticación puede devolver un ID de usuario y algunos metadatos en la respuesta:
El mensaje de respuesta DEBE consistir en los siguientes marcos de mensaje:
– Un marco de delimitador de dirección, que DEBE tener una longitud de cero.
– El marco de versión, que DEBE contener los tres octetos “1.0”.
– El ID de solicitud, que PUEDE contener un blob binario opaco.
– El código de estado, que DEBE contener una cadena.
– El texto de estado, que PUEDE contener una cadena.
– El ID de usuario, que DEBE contener una cadena.
– Los metadatos, que PUEDE contener un blob.
Un poco más adelante, precisa el significado de ID de usuario :
ID de usuario: PUEDE proporcionar la identidad del usuario en caso de un estado 200, para su uso por parte de las aplicaciones. Para otros estados, DEBE estar vacío.
Mi pregunta es: ¿Cómo se puede recuperar el ID de usuario de la respuesta con cppzmq?
Pequeño ejemplo de código para mostrar lo que quiero decir:
void client() {
zmq::context<em> context;
zmq::socket</em>t socket (context, zmq::socket<em>type::req);
socket.set(zmq::sockopt::zap</em>domain, "global");
socket.set(zmq::sockopt::plain<em>username, "user");
socket.set(zmq::sockopt::plain</em>password, "password");
socket.connect("tcp://127.0.0.1:4242");
...
std::string auth<em>user</em>id = /* función mágica aquí */;
}
davy.ai
Para recuperar el ID de usuario de la respuesta ZAP en cppzmq, se puede utilizar la clase
zmq::message_t
para recibir los fotogramas del mensaje de respuesta ZAP y luego recuperar el fotograma del ID de usuario usando el métodozmq_msg_data()
para acceder a su contenido.El código de ejemplo para recuperar el ID de usuario es el siguiente:
Este código primero envía un mensaje de solicitud con el dominio ZAP, el nombre de usuario y la contraseña configurados para la autenticación. Luego recibe un mensaje de respuesta e intenta recuperar el fotograma del ID de usuario a partir de él. El código comprueba que la versión de ZAP y el código de estado sean válidos y luego busca el fotograma del ID de usuario mediante la iteración sobre los fotogramas en el mensaje hasta que encuentra el primer fotograma del delimitador de la dirección. Luego comprueba que el texto de estado sea “OK” y recupera la longitud del fotograma del ID de usuario a partir de los datos del fotograma. Finalmente, copia el contenido del fotograma del ID de usuario en una variable
std::string
auth_user_id
que puede ser utilizada por la aplicación.