User 13204940 Ответов: 0

Безопасный протокол аутентификации между клиентом и сервером


Привет,

Я разрабатываю игровой сервер с клиентом WinForms для тестирования. Я создал пакетную систему, в которой, например, для имитации игрока, отправляющего сообщение чата в игре, клиент создает PacketPlayerChat(строковое сообщение), сериализует его и отправляет на сервер. Затем сервер использует данные заголовка в пакете, чтобы восстановить правильный тип пакета и заполнить его значения.

Когда клиент подключается к серверу, имитируя игрока, присоединяющегося к серверу в игре, он должен пройти аутентификацию. Я думаю сделать это следующим образом:

• Клиент подключается к игровому серверу
• Игровой сервер отправляет PacketServerRequestAuth()
• Клиент отправляет PacketPlayerAuth(строковое имя пользователя, строковый пароль)
• Затем игровой сервер проверяет это с помощью сервера аутентификации
• Игровой сервер отправляет PacketServerAuthResult(результат AuthResult) в зависимости от результата входа в систему
• Если вход в систему не удался, игровой сервер закрывает клиентское соединение


Конечно, имя пользователя и пароль будут зашифрованы.

Если это безопасный метод? Я знаю, что модифицированный сервер позволит пользователю захватить зашифрованные имена пользователей и пароль, но они бесполезны для них.

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

Я думаю, что лучше всего включить какой-то одноразовый токен; если это хорошая идея, то как лучше всего ее реализовать?

У меня была одна идея::

• Клиент запрашивает токен с сервера аутентификации
• Клиент отправляет регистрационные данные вместе с токеном на игровой сервер
• Игровой сервер аутентифицирует пользователя с помощью auth server, что возможно только в том случае, если токен действителен и является одноразовым.
• Сервер аутентификации игнорирует запросы аутентификации, если токен недействителен.

Что я уже пробовал:

Размышляющий. О многих вещах.

George Swan

Рассматривали ли вы возможность реализации Scram-SHA-1 в качестве метода аутентификации? Есть хорошая статья на сайте https://www.mongodb.com/blog/post/improved-password-based-authentication-mongodb-30-scram-explained-part-1

0 Ответов