Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Метки:
Теги Теги
authlib skin yggdrasil

TaoGunner

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
TaoGunner
От автора:
Я перестал следить за темой. Если нужна более свежая библиотека - пишите в телегу.
Сделаю по мере появления времени.
Telegram: TaoGunner
​

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

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

upload-2022-8-6-23-40-49.png

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

Какие изменения сделаны в оригинальной библиотеке:
  • [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
    --------------------
    26.1.2       authlib-7.0.63.jar
    1.21.0       authlib-6.0.54.jar
    1.20.6       authlib-6.0.54.jar
    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, ну не получилось, возможно я ещё до конца не разобрался, но увы.
 

Вложения:

Последнее редактирование:
Почёт уважуха поц) Уважаю.
 
Спустя два года это таки появилось.
 
Спустя два года это таки появилось.
Это появилось уже очень давно. Просто отдельно никто не выкладывал. У всех свои реализации, единственная резница.
P.s возможно сигнатуру совсем уберут и станет еще проще.
 
А что с плащами и блоком головы?
Бегло проверил на домашнем сервере:
image.png

Обновление 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 : он производит вывод информации о скине и плаще игрока, зашедшего с одиночную игру.
 
Последнее редактирование:
@TaoGunner всегда следил за вашими работами на minecraft modding. Как всегда все отлично работает!
 
@TaoGunner лучше сделать в конфиге полные ссылки на скрипты, к которым идёт GET запрос. Т.е. добавляться ничего не будет, а будет лишь подстановка значения с помощью String.format() так каждый сможет настроить скрипт так как ему нравится.
Код:
# Путь до скрипта profile
    S:PROFILE_URL=http://127.0.0.1/auth/profile.php?uuid=%s
Какой get ты что курил? Там уже давно идет post raw data
 
Какой get ты что курил? Там уже давно идет post raw data
Вот рабочая, оригинальная версия запроса:
Код:
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 .
 
Последнее редактирование:
Вот рабочая, оригинальная версия запроса:
Код:
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 .
Ну на профиле у меня тоже самое. Остальное все в json идет.
Хотя у меня была идея с .htaccess и чпу, но чет влом было переписывать.
 
Последний вопрос. Что будет, если выдать голову игрока, у которого нет скина, используя свою обвязку, не моджанг?
 
Хэй,чуваки! Поможете?!
Я не понял как настроить!
Стучусь в скйап,а ответа нет!
Если у тебя FMXL, то тебе это не нужно.
Последний вопрос. Что будет, если выдать голову игрока, у которого нет скина, используя свою обвязку, не моджанг?
Сань, к тебе тут нубка с вопросом рлит))
 
Можно в тему добавить оригинальные authlib с оригинальными ссылками?
 

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

Назад
Верх