Client to Server Authentication em C ++ usando sockets

Estou implementando um sistema de login / autenticação para meu pequeno programa servidor-cliente. Eu estou querendo saber como fazer isso, e eu estava esperando obter ótimas dicas / conselhos do Stack Overflow como sempre. É assim que imagino que vou fazer isso.

Cliente se conecta ao servidor.Servidor envia um 'token' para o cliente (com base no tempo, provavelmente, e qualquer outra coisa)O cliente retorna o nome de usuário e uma senha criptografada sha1, junto com o token.O servidor os recebe e autentica o usuário para as credenciais no banco de dados do lado do servidor.O token agora é verificado e o usuário está conectado com o token.

Isso é de todo uma maneira segura de fazer isso? Eu imaginei que o cliente também envia uma chave serial ou algo assim para formar um par serial / token, para que outro cliente não possa falsificar o mesmo token (embora o token seja gerado pelo lado do servidor).

Os detalhes de implementação não são necessários, pois sou capaz de executar a implementação.

Minha pergunta seria, antes, duas perguntas:

Quais são as formas de conseguir um sistema de login / autenticação com soquetesQuais as formas de proteger minha conexão cliente-servidor?EDITAR: Eu esqueci de perguntar, como esta é uma questão C ++, existem bibliotecas que podem ajudar na criptografia / autenticação?

A segurança é um problema para mim, então quero ter certeza de que estou certo.

Talvez alguma informação de fundo. É um servidor de jogo, uma pessoa entra com sua conta e é levada para um 'Lobby', onde ele pode escolher um 'World Server' para jogar. O servidor mundial é um processo separado em execução (possivelmente) em uma máquina diferente na mesma rede.

Por essa razão, eu quero ter um conceito de sessão neste, o usuário efetua login e uma sessão é gerada, o servidor de login retransmite a sessão para o servidor do mundo escolhido pelo usuário, para que o servidor mundial saiba que o usuário está realmente logado.

Eu acho que o cliente terá que confirmar a sessão para o servidor mundial e tudo mais, mas vou me preocupar com isso mais tarde.

Atenciosamente,Jesse

questionAnswers(2)

yourAnswerToTheQuestion