Я использую систему входа/аутентификации для моей маленькой сервер-клиентской программы. Мне интересно, как это сделать, и я надеялся получить некоторые полезные советы от Stack Overflow, как всегда. Вот как я себе представляю, что я это сделаю.
- Клиент подключается к серверу.
- Сервер отправляет клиенту "токен" (в зависимости от времени и т.д.)
- Клиент возвращает имя пользователя и зашифрованный пароль sha1 вместе с токеном.
- Сервер получает их и аутентифицирует пользователя для учетных данных в серверной базе данных.
- Теперь токен проверяется и пользователь подписывается с токеном.
Это вообще безопасный способ сделать это? Я решил, что клиент также отправляет серийный ключ или некоторые из них, чтобы сформировать пару последовательных/токенов, чтобы другой клиент не мог подделать тот же токен (хотя токен генерируется серверной стороной).
Детали реализации не требуются, так как я способен выполнять реализацию.
Мой вопрос, скорее, был бы двумя вопросами:
- Какие существуют способы достижения системы входа/аутентификации с сокетами.
- Какие способы защиты моего соединения "клиент-сервер"
- EDIT. Я забыл спросить, так как это вопрос на С++, есть ли библиотеки, которые могут помочь в шифровании/аутентификации?
Безопасность - это проблема для меня, поэтому я хочу быть уверенным, что я прав.
Возможно, некоторая справочная информация. Это игровой сервер, человек входит в свою учетную запись и отправляется в "Лобби", где он может выбрать "Мировой сервер" для игры. Мировой сервер - это отдельный процесс, выполняемый (возможно) на другом компьютере в той же сети.
По этой причине я хочу иметь концепцию сеанса в этом, пользователь регистрируется и создается сеанс, сервер регистрации передает сеанс на сервер, который пользователь выбирает, так что серверу мира известно, что пользователь фактически вошел в систему.
Я считаю, что клиент должен будет подтвердить сеанс на мировой сервер и все такое, но об этом я буду беспокоиться позже.
С уважением, Джесси