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

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

  • Клиент подключается к серверу.
  • Сервер отправляет «токен» клиенту (в зависимости от времени, вероятно, и чего-то еще)
  • Клиент возвращает имя пользователя и зашифрованный пароль sha1 вместе с токеном.
  • Сервер получает их и аутентифицирует пользователя по учетным данным в базе данных на стороне сервера -.
  • Теперь токен проверен, и пользователь вошел в систему с помощью токена.

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

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

Мой вопрос был бы, скорее, двумя вопросами:

  • Какие существуют способы создания системы входа/аутентификации с помощью сокетов
  • Какие есть способы защитить соединение моего клиента -с сервером -
  • РЕДАКТИРОВАТЬ:Я забыл спросить, поскольку это вопрос C++, существуют ли какие-либо библиотеки, которые могут помочь в шифровании/аутентификации?

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

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

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

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

Искренне, Джесси

20
задан Jesse Brands 20 July 2012 в 14:34
поделиться