1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Утилита [1.7.10 - 1.20.2] Authlib SkinFix - Авторизация и работающие скины своими руками

Тема в разделе "Модификации клиента", создана пользователем TaoGunner, 29 мар 2016.

Метки:
  1. Автор темы
    TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    [​IMG]
    Authlib SkinFix - пропатченная библиотека authlib от Mojang, которая отвечает за авторизацию между клиентом игры и сервером. Благодаря небольшим изменениям, можно использовать для своих нужд официальную систему авторизации клиентов Minecraft с работающими скинами игроков и плащей. Подробнее о системе авторизации Yggdrasil можно почитать в моем гайде, либо на вики.

    Уже давно Mojang ввела цифровую подпись каждого скина, который находится на их серверах. Если отдать клиенту игры текстуру игрока без цифровой подписи, он применит стандартную текстуру Стива, поэтому у многих начиная с версии 1.8 скины просто так работать не захотели. Тем более, в новых версиях библиотеки authlib существует проверка на домен, с которого эта информация поступает на клиент. Обычно эту проблему решал аддон Skin Restorer. В пропатченной библиотеке удалены все проверки, позволяя грузить ваши скины откуда угодно. Начинают работать скины игрока, плащей, а также отображаются лица в списке игроков.

    [​IMG]

    Последнее изменение: от 17.02.2024г.

    Какие изменения сделаны в оригинальной библиотеке:
    • [Patch] Убрана проверка цифровой подписи скинов и плащей;
    • [Patch] Убрана проверка домена, с которого клиент получает скины;
    • [Patch] Ссылки на скрипты авторизации серверов Mojang заменены ссылками на localhost (127.0.0.1:8000);
    • [Patch] Во все запросы добавлен User-Agent (против блокировки CloudFlare);
    • [Misc] Добавлен вывод в лог сообщения SkinFix by TaoGunner (сообщение позволяет определить, загрузилась ли библиотека);

    Требования:
    • Minecraft версии 1.7.10 и выше;
    • Знание системы авторизации Yggdrasil;
    • Умение работать с JSON.

    Как пользоваться:
    1. Находим в своём клиенте игры библиотеку authlib . В зависимости от версии клиента это могут быть разные версии библиотек:
      Код:
      Minecraft    authlib
      --------------------
      1.20.2       authlib-5.0.47.jar
      1.20.1       authlib-4.0.43.jar
      1.20.0       authlib-4.0.43.jar
      1.19.4       authlib-3.18.38.jar
      1.19.2       authlib-3.11.39.jar
      1.18.2       authlib-3.3.39.jar
      1.17.1       authlib-2.3.31.jar
      1.16.5       authlib-2.1.28.jar
      1.15.2       authlib-1.5.25.jar
      1.14.4       authlib-1.5.25.jar
      1.13.2       authlib-1.5.25.jar
      1.12.2       authlib-1.5.25.jar
      1.12.0       authlib-1.5.25.jar
      1.10.2       authlib-1.5.22.jar
      1.9.4        authlib-1.5.22.jar
      1.8.9        authlib-1.5.21.jar
      1.7.10       authlib-1.5.21.jar
      
    2. Определившись, запоминаем её и ищем в архиве исправленную библиотеку с подходящей версией. Открываем исправленную библиотеку с помощью онлайн-редактора и ищем такие строки:
      Код:
      http://127.0.0.1:8000/auth/join.php
      http://127.0.0.1:8000/auth/hasJoined.php
      http://127.0.0.1:8000/auth/profile.php?uuid=
      
    3. Меняем пути до скриптов на ваши, например:
      Код:
      Пример путей для скриптов на PHP:
      http://my-minecraft-server.ru:80/minecraft/join.php
      http://my-minecraft-server.ru:80/minecraft/hasJoined.php
      http://my-minecraft-server.ru:80/minecraft/profile.php?uuid=
      
      Пример путей для скриптов на других языках:
      http://localhost:8080/minecraft/join
      http://localhost:8080/minecraft/hasJoined
      http://localhost:8080/minecraft/profile/
      
    4. Сохраняем изменения в библиотеку. Теперь необходимо поместить её и в клиент, и на сервер:
      • КЛИЕНТ: удаляем оригинальную библиотеку и заменяем её на нашу (обычно она лежит по пути libraries/com/mojang/authlib);
      • СЕРВЕР: классы библиотеки находятся внутри minecraft_server.1.xx.x.jar (внутри jar ищите com/mojang/authlib). Открываем jar-файл пропатченной библиотеки и заменяем файлы сервера. Внимание! Некоторые сервера, например Forge, не используют minecraft_server.1.xx.x.jar, ищите где лежит authlib внимательнее)
    5. Теперь остается лишь настроить скрипты для обработки запросов клиента и сервера. Примеры скриптов на PHP лежат в архиве и достаточно подробно снабжены комментариями.
      [config.php] Основной файл с настройками, всегда начинайте с него! Тут указываем параметры подключения к MySQL, а также пути до скинов. Один из важных параметров на время настройки это $DEBUG. Поменяйте его значение на TRUE и у вас будет создан файл debug.log, в котором можно узнать, как отрабатывает тот или иной скрипт.
      [join.php] Обрабатывает POST-запросы клиента игры (в формате JSON) при подключении к серверу.
      [hasJoined.php] Обрабатывает GET-запросы сервера игры, когда к нему пытаются подключиться.
      [profile.php] Отвечает за выдачу скинов и плащей.
      [launcher.php] Этот скрипт не для официальной системы авторизации Yggdrasil и нужен лишь для примера обвязки с каким-нибудь "абстрактным" лаунчером. Выдает параметры запуска для клиента игры: UUID и accessToken.

      Вопрос: Для чего вообще использовать эту библиотеку, если есть плагины на регистрацию (например AuthMe) и починку текстур (например SkinRestorer)?
      Ответ: Эта патченная библиотека нужна для:
      • для серверов, не поддерживающих плагины;
      • для серверов, на которые игроки заходят с НЕлицензионного лаунчера;
      • для тех администраторов, кто хочет, чтобы игроки не вводили при входе на сервер пароль;
      • для тех, кто хочет разобраться и создает свой лаунчер или скрипты для системы регистрации игроков.


      Вопрос: Виден ли мой скин для других игроков?
      Ответ: Да. Всё работает так, как на лицензионных серверах.


      Вопрос: Я написал свои скрипты и почему-то у меня текстура игрока отображается на плаще (или наоборот). Почему?
      Ответ: Потому что имена текстур в ссылках на скины плаща и игрока у тебя одинаковые, пусть даже ссылки на файлы текстур разные. Например:
      Код:
          Плащ: http://hostname.com/cape/taogunner.png
          Скин: http://hostname.com/skin/taogunner.png
      
      Клиент скачает вначале первый taogunner.png (скин плаща) и сохранит в assets/skins/. А затем скачает второй taogunner.png (скин игрока) и заменит им первый. Поэтому вместо скина плаща отобразится скин игрока.


      Вопрос: Я заменил скин игрока на сайте, перезагрузил клиент игры, но отображается старый скин. Почему?
      Ответ: Очисти папку assets/skins/ в клиенте игры и повтори попытку. Если всё получилось - значит твой новый скин имеет то же имя, что и старый. Клиент не дурак: если он уже скачал taogunner.png, то заного он скачивать его не будет. Чтобы не очищать клиент каждый раз - при смене скина на сервере изменяй ссылку. Я использую md5(текстура.png).


      Вопрос: Я использую лицензионный сервер версии 1.18 или выше. При запуске он создаёт рядом с собой папку libraries, а внутри я нашел и заменил jar-файл с authlib. Но при запуске сервера он пишет, что хеш библиотеки не сходится - и заменяет её на оригинальную. Как заставить его этого не делать?
      Ответ: Внутри файла server.jar есть папка /META-INF. В ней найди и замени оригинальную библиотеку на пропатченную, а также обнови хеш этой библиотеки в файле /META-INF/libraries.list.


      Вопрос: Я использую лицензионный сервер версии 1.19 или выше. При попытке игроков подключиться появляется сообщение:
      Код:
      Failed to validate profile key: Missing profile public key.
      This server requires secure profiles.
      
      Ответ: Это из-за новой системы репортов, которая требует, чтобы все сообщения игроков были подписаны индивидуальным RSA-ключом. Эту опцию можно безопасно отключить server.properties сделав enforce-secure-profile=false.

      Вопрос: Я использую защиту CloudFlare и система авторизации не работает. Почему?
      Ответ: Отвечу цитатой одного человека, который разобрался в чем причина и даже подсказал, как решить проблему блокировки запросов клиента и сервера игры системой CloudFlare:

      В общем. Всё оказалось на много интереснее.

      Дело оказалось вот в чём. Cloudflare использует не просто защищённые сервера, но и оптимизирует запросы используя CDN.
      Как я понял отсутствие значение User-Agent для неё само по себе является "аномалией". Обычно пустые User-Agent используют боты. Cloudflare это фиксирует . И для снижение нагрузки на конечный сервер, стремиться убрать "мусор", запросы с пустыми User-Agent будут заблокированы на уровне CDN. Иными словами до нашего сервера и до NGINX не дойдут.

      В Cloudflare в раздели Security есть вкладка, WAF которую можно использовать в качестве настройки User-Agent. Как это работает. Допустим один и тот же user-Agent может создавать атаку некую, искусственные запросы и прочее. Мы можем обнаружить атаку и заблокировать её вписав User-Agent. И атака не дойдёт даже до нашего сервера. Но, должны быть правила "разрешить", я пытался разрешить пустой User-Agent, ну не получилось, возможно я ещё до конца не разобрался, но увы.

      [$] Нужна помощь с запуском или настройкой под лаунчер? [$]
      Telegram: TaoGunner
     

    Вложения:

    Последнее редактирование: 17 фев 2024
  2. Neuter

    Neuter Старожил Пользователь

    Баллы:
    123
    Skype:
    Neuter3
    Имя в Minecraft:
    Dream4Game
    Почёт уважуха поц) Уважаю.
     
  3. Metronomko

    Metronomko Старожил Пользователь

    Баллы:
    123
    С Optifine совместимо?
     
  4. Автор темы
    TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Не проверял с Optifine, но скорее всего - да, потому как мод не меняет ничего в игре. Только в библиотеке authlib.
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    А что с плащами и блоком головы?
     
  6. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Спустя два года это таки появилось.
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Это появилось уже очень давно. Просто отдельно никто не выкладывал. У всех свои реализации, единственная резница.
    P.s возможно сигнатуру совсем уберут и станет еще проще.
     
  8. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ну, как бы имелось в виду тут, на ведре появилось.
     
  9. Автор темы
    TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Бегло проверил на домашнем сервере:
    [​IMG]

    Обновление v1.1
    • Исправлены скины в одиночной игре : добавлена возможность изменения ссылки на скрипт https://sessionserver.mojang.com/session/minecraft/profile/<uuid> . По умолчанию она меняется на http://127.0.0.1/auth/profile.php?uuid= (добавление ?uuid= необходимо для корректной обработки GET-запроса). Данный скрипт обрабатывает запросы при заходе в одиночную игру.
    • В файл конфигурации добавлен параметр DEBUG. Он позволяет вывести в лог результат замены ссылок на скрипты.
    • Обновлены PHP-скрипты до версии 1.3.
    • Скрипт launcher.php : добавлена возможность регистрации нового пользователя.
    • Скрипт launcher.php : изменена проверка имени пользователя: теперь имя должно состоять минимум из 4 символов, первый из которых - буква.
    • Скрипт launcher.php : теперь результат работы скрипта выводится в JSON-формате. Это удобнее для обработки результата вашим лаунчером.
    • Добавлен скрипт profile.php : он производит вывод информации о скине и плаще игрока, зашедшего с одиночную игру.
     
    Последнее редактирование: 2 апр 2016
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вот теперь :good:
     
  11. Linkinkov

    Linkinkov Старожил Пользователь

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    @TaoGunner всегда следил за вашими работами на minecraft modding. Как всегда все отлично работает!
     
  12. Автор темы
    TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Да, согласен, подкорректировать стоит.
     
  13. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Какой get ты что курил? Там уже давно идет post raw data
     
  14. Автор темы
    TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Вот рабочая, оригинальная версия запроса:
    Код:
    https://sessionserver.mojang.com/session/minecraft/profile/5e1e184e9f734cf9aa30ce6bef53254b?unsigned=false
    С помощью добавления ?uuid= я всего лишь хотел преобразовать подобный запрос в GET-формат:
    Код:
    http://127.0.0.1/auth/profile.php?uuid=5e1e184e9f734cf9aa30ce6bef53254b&unsigned=false
    Обновление 1.1.1
    • Обновлен файл конфигурации : теперь путь до файла profile.php редактируется полностью, вместе с добавлением ?uuid= (спасибо этому посту).
    • Исправлены ошибки мода, предназначенного для Minecraft версии 1.9 .
     
    Последнее редактирование: 2 апр 2016
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну на профиле у меня тоже самое. Остальное все в json идет.
    Хотя у меня была идея с .htaccess и чпу, но чет влом было переписывать.
     
  16. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Последний вопрос. Что будет, если выдать голову игрока, у которого нет скина, используя свою обвязку, не моджанг?
     
  17. Neuter

    Neuter Старожил Пользователь

    Баллы:
    123
    Skype:
    Neuter3
    Имя в Minecraft:
    Dream4Game
    Если у тебя FMXL, то тебе это не нужно.
    Сань, к тебе тут нубка с вопросом рлит))
     
  18. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Таких я фильтрую и не читаю.
     
  19. Neuter

    Neuter Старожил Пользователь

    Баллы:
    123
    Skype:
    Neuter3
    Имя в Minecraft:
    Dream4Game
    :D
     
  20. konnos1

    konnos1 Активный участник Пользователь

    Баллы:
    61
    Можно в тему добавить оригинальные authlib с оригинальными ссылками?
     

Поделиться этой страницей