Autenticación de cliente a servidor en C ++ usando sockets

Estoy implementando un sistema de inicio de sesión / autenticación para mi pequeño programa cliente-servidor. Me pregunto cómo hacer esto, y esperaba recibir algunos consejos / sugerencias de Stack Overflow como siempre. Así es como me imagino que lo haré.

El cliente se conecta al servidor.El servidor envía un 'token' al cliente (basado probablemente en el tiempo y lo que sea)El cliente devuelve el nombre de usuario y una contraseña encriptada sha1, junto con el token.El servidor los recibe y autentica al usuario con las credenciales en la base de datos del lado del servidor.Ahora se ha verificado el token y el usuario ha iniciado sesión con el token.

¿Es esta una forma segura de hacerlo? Me di cuenta de que el cliente también envía una clave de serie o algo similar para formar un par de serie / token, de modo que otro cliente no pueda falsificar el mismo token (aunque el token es generado por el servidor).

No se requieren los detalles de la implementación, ya que soy capaz de hacer la implementación.

Mi pregunta sería, más bien, dos preguntas:

¿Qué formas existen para lograr un sistema de inicio de sesión / autenticación con sockets?¿Qué formas existen para asegurar mi conexión cliente-servidor?EDITAR: Olvidé preguntar, ya que esta es una pregunta de C ++, ¿hay bibliotecas que puedan ayudar en el cifrado / autenticación?

La seguridad es un problema para mí, así que quiero asegurarme de hacerlo bien.

Tal vez alguna información de fondo. Es un servidor de juegos, una persona inicia sesión con su cuenta y es llevada a un 'Lobby', donde puede elegir un 'World Server' para jugar. El servidor mundial es un proceso separado que se ejecuta (posiblemente) en una máquina diferente en la misma red.

Por esa razón, quiero tener un concepto de sesión en esto, el usuario inicia sesión y se genera una sesión, el servidor de inicio de sesión transmite la sesión al servidor mundial que el usuario elige, para que ese servidor mundial sepa que el usuario realmente es conectado.

Reconozco que el cliente tendrá que confirmar la sesión al servidor mundial y todo eso, pero me preocuparé por eso más adelante.

Sinceramente,Jesse

Respuestas a la pregunta(2)

Su respuesta a la pregunta