Estoy creando un servidor Qt que utiliza SSL a través de TCP. Los clientes pueden autorizarse en el servidor mediante inicio de sesión y contraseña y convertirse en usuarios. Solo los usuarios pueden realizar acciones con sus cuentas. Los clientes no autorizados solo pueden autorizarse ellos mismos.
Ahora la autorización se ve así:
- El cliente se conecta al servidor.
- El cliente envía las credenciales (inicio de sesión, contraseña) al servidor.
- El servidor autentica las credenciales y autoriza al cliente como algún usuario, esto solo significa que ahora el socket de ese cliente está autorizado como usuario, pero el servidor no tiene ningún "token" y / o algunas otras cosas.
Como puede ver, este esquema no está completo y no es seguro.
Entonces, la pregunta principal: ¿cómo debo mejorarlo?
Al principio creo que debería usar los tokens de autenticación. Tengo que generarlos en el servidor después de la autorización del cliente y enviarlos al cliente. Después de eso, el cliente debe enviar este token al servidor en cada solicitud como confirmación de su autenticidad.
Sin embargo, tengo muchas preguntas al respecto y no solo:
- ¿Cómo debo generarlas? ¿Es UUID típico o debería usar algún algoritmo de generación específico?
- ¿Por qué no puedo autorizar un socket específico como usuario y usarlo hasta que se cierre el socket?
- ¿Dónde almacenar este token en el lado del servidor?
- ¿Cómo se volverá a conectar el cliente al servidor?
- ¿Cómo se conectará el cliente al servidor después de que se vuelva a abrir la aplicación?
- ¿Qué datos deben almacenarse en el lado del cliente para volver a autorizarlos sin la intervención del usuario (sin volver a ingresar el nombre de usuario y la contraseña)?
- ¿Qué más necesito saber sobre los tokens de autenticación?
- Y, finalmente, ¿cómo mejorar este esquema, excepto el uso de tokens?