Своя аутентификация

tox1cozZ

aka Agravaine
8,453
599
2,906
Появилась необходимость написать свою аутентификацию для майна.
Плохо разбираюсь в данной теме, поэтому хочу услышать советы.
У меня идея такая: человек логинится в лаунчере - генерируется токен и записывается в БД - передается аргументом при запуске игры.
При заходе на сервер клиент отсылает ник и токен, сервер сверяет данные с БД и если такая пара есть - пропускает на сервер.
Есть ли проблемы в этом подходе? Покопавшись в коде майна увидел кучу оверхеда, не совсем понимаю для чего он.
Знатоки, объясните.
 
человек логинится в лаунчере - генерируется токен и записывается в БД - передается аргументом при запуске игры.
При заходе на сервер клиент отсылает ник и токен, сервер сверяет данные с БД и если такая пара есть - пропускает на сервер.

Потом меняешь клиент, добавляем м@диков, пишешь токен в аргументы и заходишь на сервер с другого лаунчера, с м@диками.
 
У меня тоже была идея сделать подобное. Когда игрок авторизуется в лаунчере, лаунчсервер отправляет пакет на сервер с сессией игрока, вроде можно и без бд делать.
 
Потом меняешь клиент, добавляем м@диков, пишешь токен в аргументы и заходишь на сервер с другого лаунчера, с м@диками.
А в каком месте тогда yggdrasil авторизация защищает от этого?
 
Вроде никаким. Можно легко стащить сессию и запустить свой клиент и зайти на сервер
 
Последнее редактирование:
Майновская пляска с публичными и приватными ключами решает проблему того, что в обычной майновской аутентификации участвует три стороны: моджанг, сервер (которому нельзя доверять данные, которые позволили бы владельцу сервера получить доступ к аккаунту игрока на другом сервере) и клиент. Именно из-за соображений безопасности клиент не может отдать серверу токен, который прокинут в него лаунчером. Поэтому там трехсторонняя схема, в которой (если упрощенно, а целиком я и сам не помню):
  • лаунчер получает у моджанга токен по паролю
  • токен прокидывается в клиент
  • клиент начинает подключение к серверу, узнает его serverId
  • клиент сообщает serverId и свой токен моджангу (запрос joinserver)
  • клиент говорит серверу "я готов, чекай мою аутентификацию"
  • сервер сообщает serverId и ююид игрока моджангу (запрос checkserver)
  • моджанг отвечает, правда ли игрок с таким ююид прошел аутентификации на вашем serverId
Если трех сторон нет (есть только игрок, твой сервер и твой же сервер аутентификации), то смысла от всей этой пляски никакой, и теоретически можно передавать auth токен от игрока серверу, а сервер сам уже проверит токен. Я делаю так, но для этого нужно сильнее патчить майн, поэтому чаще просто подменяют адреса checkserver и joinserver запросов и воспроизводят в своем лаунчере такую же логику аутентификации, как моджанг.
 
Последнее редактирование:
Огромное спасибо за объяснение ключей. А что скажешь по поводу проблемы, которую написали выше? По сути если вытащить токен, то можно будет запускаться и играть в обход лаунчеру.

но для этого нужно сильнее патчить майн
Пофиг вообще, у меня отсутствует фордж и есть полный контроль над кодом.
 
Возможность запустить игру без лаунчера считают проблемой только те кто пытается делать защиту от читов через лаунчер, я же считаю это большой глупостью, поэтому сказать мне нечего.
 
Можно и хуками, но там просто строчку заменить же, народ с рубаккита уже вечность как делает это через in class translator
 
@GloomyFolken, в новых версиях надо аутхлибу патчить. Моджанги сделали проверку url адреса, если не их домены, то не сработает(в 1.7 тоже)
 
На самом деле, можно просто заменить строчки с ссылками на свои, а самому сделать аналогичную аутентификацию на сайте. Для 1.7.10 я делал вот по этому ресу. Не знаю, что в новых версиях добавили, но я думаю, что можно обойтись просто заменой строк; без всяких хуков.
 
@CumingSoon, без патча новой аутхлибы просто так не заменить ссылки, так как проверка на домены моджангов идёт
 
Можно сделать авторизацию без лаунчера

GVEnn.gif
 
Назад
Сверху