Аутентификация клиента на сервер в C ++ с использованием сокетов

Я внедряю систему входа в систему / аутентификации для моей маленькой программы сервер-клиент. Мне интересно, как это сделать, и я надеялся получить отличные советы / советы от Stack Overflow, как всегда. Вот как я представляю, что я это сделаю.

Client connects to the server. Server sends a 'token' to the Client (based on time probably and whatever) Client returns the username and a sha1 encrypted password, along with the token. Server receives them and authenticates the user to the credentials in the server-side database. The token is now verified and the user is signed in with the token.

Это вообще безопасный способ сделать это? Я полагал, что клиент также отправляет серийный ключ или что-то подобное, чтобы сформировать пару последовательный / токен, чтобы другой клиент не мог подделать тот же токен (хотя токен генерируется на стороне сервера).

Детали реализации не требуются, так как я способен выполнить реализацию.

Мой вопрос, скорее, два вопроса:

What ways are there to achieve a login/authentication system with sockets What ways are there to secure my client-to-server connection EDIT: I forgot to ask, as this is a C++ question, are there any libraries that can assist in encryption/authentication?

Безопасность - это проблема для меня, поэтому я хочу быть уверен, что все делаю правильно.

Возможно некоторая справочная информация. Это игровой сервер, человек входит в систему со своей учетной записью и попадает в «лобби», где он может выбрать «World Server». играть дальше. Мировой сервер - это отдельный процесс, работающий (возможно) на другом компьютере в той же сети.

По этой причине я хочу иметь концепцию сеанса: пользователь входит в систему и генерирует сеанс, сервер входа передает сеанс на мировой сервер, который выбирает пользователь, чтобы мировой сервер знал, что пользователь на самом деле авторизовался

Я считаю, что клиент должен будет подтвердить сеанс на мировом сервере и все такое, но я буду беспокоиться об этом позже.

С уважением, Jesse

Ответы на вопрос(2)

Ваш ответ на вопрос