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

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

Метки:
Теги Теги
authlib skin yggdrasil
С головами есть проблема, как я понял, что бы получить текстуру головы, майнкрафт отправляет запрос на localhost/auth/profile.php, но uuid для запроса берет с официальных серверов
(Если пользователь уже заходил на сервер, то uuid для запроса майнкрафт берет у сервера, насколько я понимаю)
Это на 1.16.5
 
С головами есть проблема, как я понял, что бы получить текстуру головы, майнкрафт отправляет запрос на localhost/auth/profile.php, но uuid для запроса берет с официальных серверов
(Если пользователь уже заходил на сервер, то uuid для запроса майнкрафт берет у сервера, насколько я понимаю)
Это на 1.16.5

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

  1. Удалить содержимое папки assets/skins/
  2. Удалить json с официальным профилем

Если после этих манипуляций ошибка воспроизводится - то тогда да, это проблема.
 
Привет, появилась проблемка.
Изначально, проблема была в "Multiplayer is disabled. Check Microsoft settings."
В сингле скины работали
upload_2024-6-21_21-43-7.png

Решил ее через (на клиенте и сервере):
-Dminecraft.api.auth.host=https://nope.invalid
-Dminecraft.api.account.host=https://nope.invalid
-Dminecraft.api.session.host=https://nope.invalid
-Dminecraft.api.services.host=https://nope.invalid

Но потом я не смог зайти на "исправленный" сервер, получил ошибку Failed to log in
upload_2024-6-21_21-44-55.png

Сервер: Ядро Purpur 1.16.5 патч
Клиент: Чистый 1.16.5 патч

Как решить проблему с мультиплеером?
 
Привет, появилась проблемка.
Изначально, проблема была в "Multiplayer is disabled. Check Microsoft settings."
В сингле скины работали
Посмотреть вложение 67365

Решил ее через (на клиенте и сервере):
-Dminecraft.api.auth.host=https://nope.invalid
-Dminecraft.api.account.host=https://nope.invalid
-Dminecraft.api.session.host=https://nope.invalid
-Dminecraft.api.services.host=https://nope.invalid

Но потом я не смог зайти на "исправленный" сервер, получил ошибку Failed to log in
Посмотреть вложение 67366

Сервер: Ядро Purpur 1.16.5 патч
Клиент: Чистый 1.16.5 патч

Как решить проблему с мультиплеером?
Серверы аутентификации в настоящее время отключены для технического обслуживания. Источник: ЯПереводчик
 
Серверы аутентификации в настоящее время отключены для технического обслуживания. Источник: ЯПереводчик

имхо, строчки
-Dminecraft.api.auth.host=https://nope.invalid
-Dminecraft.api.account.host=https://nope.invalid
-Dminecraft.api.session.host=https://nope.invalid
-Dminecraft.api.services.host=https://nope.invalid
https://nope.invalid

меняют сервера аута microsoft аккаунта на свои, и ни как не зависят для работы skinfix. Но в моем случае, изначально нет доступа к мультиплееру, т.е. я не могу войти на сервер. А при указании этих строчек, мультиплеер работает, но нет возможности войти на сервер.

PS: php скрипт был запущен
 
Клиент: Чистый 1.16.5 патч
Как решить проблему с мультиплеером?

Думаю, для начала нужно разобраться с параметрами запуска клиента игры. Если ты запускаешь клиент с официальным аккаунтом (используя лицензионные UUID и AccessToken), то лучше этого не делать. Если не ошибаюсь, мультиплеер блокируется, если в аккаунте указано, что тебе нет 20 лет.

Запускай клиент с фейковыми UUID и AccessToken, которые прописаны в базе данных твоей системы авторизации.

И да - проверь, что и в клиенте, и на сервере есть в логах строчка SkinFix by TaoGunner. Это будет означать, что исправленный authlib загрузился.

А лучше пиши в телеграмм.
 
Выяснилось, что сообщение Multiplayer is disabled появляется только в клиенте версии 1.16.5. Чтобы исправить это надо в authlib отредактировать ссылки https://sessionserver.mojang.com и https://api.minecraftservices.com на несуществующие. Тогда кнопка Multiplayer вернётся.

Обновление

Изменения:
  • Добавлена пропатченная библиотека для Minecraft 1.20.6 и 1.21.0 - authlib-6.0.54-skinfix.jar;

Код:
com/mojang/authlib/minecraft/client/MinecraftClient.java -> createUrlConnection
    // FIX: Добавлен User-Agent на все HTTP-запросы (обход фильтра CloudFlare)
    connection.setRequestProperty("User-Agent", "Mozilla/5.0");

com/mojang/authlib/yggdrasil/TextureUrlChecker.java
    // FIX: Функция isAllowedTextureDomain теперь всегда возвращает true
    // FIX: Функция isDomainOnList теперь всегда возвращает true

com/mojang/authlib/yggdrasil/YggdrasilEnvironment.java
    // FIX: sessionHost и servicesHost заменены на несуществующие
    "https://sessionserver.mojang.lol"
    "https://api.minecraftservices.lol"

com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.java
    // FIX: Добавлены join, hasJoin, profile адреса
    // FIX: Добавлен лог для проверки, что библиотека загружена

    public String getSecurePropertyValue(final Property property) throws InsecurePublicKeyException {}
    // FIX: Убрана проверка цифровой подписи текстур

com/mojang/authlib/yggdrasil/YggdrasilUserApiService.java
    public boolean isBlockedPlayer(final UUID playerID) {}
    // FIX: На запрос о блокировке всегда ответ false

    private Set<UUID> forceFetchBlockList() {}
    // FIX: Список заблокированных пользователей всегда пуст (убран запрос)

    public UserProperties fetchProperties() throws AuthenticationException {}
    // FIX: Все привелегии (мультиплеер, Realms, чат) - включены по-умолчанию

com/mojang/authlib/yggdrasil/YggdrasilServicesKeyInfo.java
    private static Optional<ServicesKeySet> fetch(final URL url, final MinecraftClient client) {}
    // FIX: Убран запрос сертификата клиента (мусор в логах)
 
Ко мне обратился 1 человек, который сообщил, что сам он текстуру видит, а другие игроки его текстуру - нет. Как выяснилось, в процессе патчинга я забыл убрать 1 проверку на цифровую подпись. Поэтому:

Исправление

  • Исправлена пропатченная библиотека для Minecraft 1.20.6 и 1.21.0 - authlib-6.0.54-skinfix.jar;

Текстуры проверены, все отображаются.
 
Доброго времени суток. Спасибо за замечательную библиотеку. У меня все отлично работает, но у игроков иногда появляются фризы, связанные с отправкой сообщений в чат. И я нашел паттерн когда это происходит:
- Не слать сообщения в чат около 5-10 - минут. Отправляешь сообщений в чат и клиент подвисает на 1-2 секунды. Также клиент может подвиснуть в других игроков рандомно, но специфика такая же - 1-2 секунды.
- После замены authlib на оригинальную фризы уходят.

Т.к. выше вроде как про это никто не писал, видимо проблема в технической реализации моих скриптов. Я сам их написал на Python + Fastapi, но написал их на синхронном Python с использованием Sqllite (что может вызывать проблемы). Реализовал стандартные 4 метода, что указаны в инструкции (+ get_texture отвечающий за скины). Однако я не могу понять, как связаны лаги непосредственно с пропатченной библиотекой. Потому что запросов к моему сервису во время лагов нету. Запросы идут когда игроки авторизуются, грузят/удаляют скины, заходят на сервер. Как только я возвращаю оригинальную библиотеку authlib - лаги исчезают.
 
Доброго времени суток. Спасибо за замечательную библиотеку. У меня все отлично работает, но у игроков иногда появляются фризы, связанные с отправкой сообщений в чат. И я нашел паттерн когда это происходит:
- Не слать сообщения в чат около 5-10 - минут. Отправляешь сообщений в чат и клиент подвисает на 1-2 секунды. Также клиент может подвиснуть в других игроков рандомно, но специфика такая же - 1-2 секунды.
- После замены authlib на оригинальную фризы уходят.

Т.к. выше вроде как про это никто не писал, видимо проблема в технической реализации моих скриптов. Я сам их написал на Python + Fastapi, но написал их на синхронном Python с использованием Sqllite (что может вызывать проблемы). Реализовал стандартные 4 метода, что указаны в инструкции (+ get_texture отвечающий за скины). Однако я не могу понять, как связаны лаги непосредственно с пропатченной библиотекой. Потому что запросов к моему сервису во время лагов нету. Запросы идут когда игроки авторизуются, грузят/удаляют скины, заходят на сервер. Как только я возвращаю оригинальную библиотеку authlib - лаги исчезают.
Если модовый сервер, то найти нагрузку можно при помощи мода спарк
 
Если модовый сервер, то найти нагрузку можно при помощи мода спарк
С большой долей вероятности ошибка на стороне клиента. (Спарк вроде лаги сервера только искать может). + Ошибка появляется на двух разных сборках, на разных хостах, без общих модов. Общие у них только пропатченная authlib и мои сервисы. А при удалении с клиента патченной authlib лаги проходят.
 
Последнее редактирование:
Если модовый сервер, то найти нагрузку можно при помощи мода спарк
Еще один тест провел, на чистом сервер/клиенте 1.20.1 + Forge 47.3.0: оставил на сервере офф. версию authlib (выключил online-mode). На клиенте authlib_skinfix. Итого все равно вижу лаги, после перерыва в чате. Ставлю на клиент тоже офф версию authlib - лагов нет.

Edited:
Ради теста заменил enpoint в пропатченной либе (https://api.minecraftservices.com) на свой тестовый и заметил, что как раз в момент лага идет запрос по адресу:
"https://api.minecraftservices.com/privacy/blocklist". Я видел что на версиях 1.17-1.18 был баг, связанный как раз с фризами в чате, как у меня, и вызывала их кривая система банов от Mojang. Я подозреваю, нужно вырезать из кода запрос по этому адресу, и фризы пройдут.
 
Последнее редактирование:
С большой долей вероятности ошибка на стороне клиента. (Спарк вроде лаги сервера только искать может). + Ошибка появляется на двух разных сборках, на разных хостах, без общих модов. Общие у них только пропатченная authlib и мои сервисы. А при удалении с клиента патченной authlib лаги проходят.
Спарк можно ставить и на клиент для его отладки
 
Спасибо за информацию, но чем мне поможет spark, учитывая выше мною описанное?
Спарк покажет место, которое вызывает нагрузку, но я так понимаю, что уже смогли определить и без него
 
- Не слать сообщения в чат около 5-10 - минут. Отправляешь сообщений в чат и клиент подвисает на 1-2 секунды. Также клиент может подвиснуть в других игроков рандомно, но специфика такая же - 1-2 секунды.
- После замены authlib на оригинальную фризы уходят.
После запрета cloudflare от РКН у меня перестал открываться rubukkit на домашнем интернете, поэтому пишу с опозданием, ответ вы уже сами нашли.
Патченная authlib изменяет пути до join hasJoined и profile, но остальные остаются нетронутыми. И соответственно могут быть фризы:
1. При использовании чата, так как идёт попытка получения пользовательного ключа и сертификата для подписи сообщений, потому что у Microsoft теперь есть система мутов и банов по сообщениям чата.
2. При запросе в Realm, там тоже может быть увеличен тайминг на парсинг ошибочного ответа.
3. При запросе информации о сертификатах других игроков, которые пишут в чат.

Если еще не разобрались с этой проблемой можем сколлабиться и повырезать все запросы, где наблюдаются фризы.
 
После запрета cloudflare от РКН у меня перестал открываться rubukkit на домашнем интернете, поэтому пишу с опозданием, ответ вы уже сами нашли.
Патченная authlib изменяет пути до join hasJoined и profile, но остальные остаются нетронутыми. И соответственно могут быть фризы:
1. При использовании чата, так как идёт попытка получения пользовательного ключа и сертификата для подписи сообщений, потому что у Microsoft теперь есть система мутов и банов по сообщениям чата.
2. При запросе в Realm, там тоже может быть увеличен тайминг на парсинг ошибочного ответа.
3. При запросе информации о сертификатах других игроков, которые пишут в чат.

Если еще не разобрались с этой проблемой можем сколлабиться и повырезать все запросы, где наблюдаются фризы.
Спасибо большое за ответ! Фризы вроде починил, но мы пока еще полноценно это не протестировали, решение в мое случае, которое скорей всего помогло:
Заменить ссылки https://sessionserver.mojang.com и https://api.minecraftservices.com на ссылку типа "https:/0.0.0.0". Почему такую? Если вставить невалидную ссылку типа "None_1234" - крашнится игра/сервер, если вставить несуществующую ссылку типа "https://none" - фриз станет еще дольше, из-за запроса, который будет заканчиваться таймаутом. А вот переход по ссылке "https:/0.0.0.0" сразу фейлится и вроде как фризов не вызывает. Костыльно, да, но пока работает.
 
Вопрос: Я использую защиту CloudFlare и система авторизации не работает. Почему?
Ответ: Отвечу цитатой одного человека, который разобрался в чем причина и даже подсказал, как решить проблему блокировки запросов клиента и сервера игры системой CloudFlare:

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

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

В Cloudflare в раздели Security есть вкладка, WAF которую можно использовать в качестве настройки User-Agent. Как это работает. Допустим один и тот же user-Agent может создавать атаку некую, искусственные запросы и прочее. Мы можем обнаружить атаку и заблокировать её вписав User-Agent. И атака не дойдёт даже до нашего сервера. Но, должны быть правила "разрешить", я пытался разрешить пустой User-Agent, ну не получилось, возможно я ещё до конца не разобрался, но увы.
Для тех, у кого проблемы с CloudFlare, причина может быть не в User-Agent а в опции Browser Integrity Check, которая проверяет заголовки HTTP-запросов. Ее можно отключить в настройках CloudFlare (Security -> Settings -> Browser Integrity Check). У меня она блокировала все запросы от от Minecraft к моему API.screenshot.png
 
Последнее редактирование:
Спасибо большое за ответ! Фризы вроде починил, но мы пока еще полноценно это не протестировали, решение в мое случае, которое скорей всего помогло:
Заменить ссылки https://sessionserver.mojang.com и https://api.minecraftservices.com на ссылку типа "https:/0.0.0.0". Почему такую? Если вставить невалидную ссылку типа "None_1234" - крашнится игра/сервер, если вставить несуществующую ссылку типа "https://none" - фриз станет еще дольше, из-за запроса, который будет заканчиваться таймаутом. А вот переход по ссылке "https:/0.0.0.0" сразу фейлится и вроде как фризов не вызывает. Костыльно, да, но пока работает.
Спойлер: это не помогло. Решил вырезать нафиг все запросы непосредственно из кода библиотеки. И вот это уже помогло. Просто закомментил обращения к этим адресам. Если интересно кому, могу дать ссылку с моей небольшой инструкцией на github как делать такие изменения в authlib.
 

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

Назад
Верх