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

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

Метки:
Теги Теги
authlib skin yggdrasil
Обновление библиотеки authlib-2.1.28 для Minecraft 1.16.5
Как и обещал, проверил прошлую, наспех сделанную библиотеку в действии. Результат: библиотека оказалась нерабочая.

Правильно написал @Re'aktiv, ссылки на авторизации теперь создаются из нескольких строк, часть хранится в старом-добром YggdrasilMinecraftSessionService, а начало ссылки (https://api-staging.mojang.com) теперь перенесено в YggdrasilEnvironment. И что самое "приятное", InClassTranslator не видит в этом классе ни одной строки! Но не беда, я всё переделал и теперь уже выкладываю проверенную библиотеку. Проверку осуществлял на домашнем сервере + клиенте с Fabric, с настройкой online-mode: true. Результат:
2021-05-05-17-42-12.png
​

Итак, что сделано:

  • YggdrasilMinecraftSessionService. Убрана проверка на домен, с которого берутся скины.
  • YggdrasilMinecraftSessionService. Убрана проверка цифровой подписи скинов.
  • YggdrasilMinecraftSessionService. В класс добавлен параметр-строка DOMAIN_NAME с началом хоста (http://localhost) для удобства редактирования в InClassTranslator'е.
  • YggdrasilMinecraftSessionService. Добавил строку в лог SkinFix by TaoGunner. Менять разрешается :)
  • YggdrasilEnvironment. Изменил пути серверов авторизации на ссылку на строку YggdrasilMinecraftSessionService.DOMAIN_NAME.
  • YggdrasilSocialInteractionsService. Убрал запрос на привилегии, который сыпал ошибкой в лог клиента. Чисто косметическое изменение.
Вот так выглядит класс YggdrasilMinecraftSessionService в InClassTranslator'е:
skinfix.png

Что выделено красным - то можно редактировать для своих нужд. Судя по этой картинке ссылки получатся такими:
И еще одно дополнение: так как было изменено несколько классов, то теперь в клиенте лучше заменить библиотеку полностью, удалив оригинальный authlib, а на сервере лучше полностью заменить содержимое папки com.mojang.authlib.
 

Вложения:

Последнее редактирование:
Обновление библиотеки authlib-2.1.28 для Minecraft 1.16.5
Как и обещал, проверил прошлую, наспех сделанную библиотеку в действии. Результат: библиотека оказалась нерабочая.

Правильно написал @Re'aktiv, ссылки на авторизации теперь создаются из нескольких строк, часть хранится в старом-добром YggdrasilMinecraftSessionService, а начало ссылки (https://api-staging.mojang.com) теперь перенесено в YggdrasilEnvironment. И что самое "приятное", InClassTranslator не видит в этом классе ни одной строки! Но не беда, я всё переделал и теперь уже выкладываю проверенную библиотеку. Проверку осуществлял на домашнем сервере + клиенте с Fabric, с настройкой online-mode: true. Результат:
2021-05-05-17-42-12.png
​


Ураааа! Спасибо! )
 
Обновление библиотеки authlib-2.1.28 для Minecraft 1.16.5
Как и обещал, проверил прошлую, наспех сделанную библиотеку в действии. Результат: библиотека оказалась нерабочая.

Правильно написал @Re'aktiv, ссылки на авторизации теперь создаются из нескольких строк, часть хранится в старом-добром YggdrasilMinecraftSessionService, а начало ссылки (https://api-staging.mojang.com) теперь перенесено в YggdrasilEnvironment. И что самое "приятное", InClassTranslator не видит в этом классе ни одной строки! Но не беда, я всё переделал и теперь уже выкладываю проверенную библиотеку. Проверку осуществлял на домашнем сервере + клиенте с Fabric, с настройкой online-mode: true. Результат:
2021-05-05-17-42-12.png
​


Хм. Потестил в общем вашу библиотеку и понял что она опять к сожалению не работает.
Сперва всё поправил как надо на свой сайт - пишет службы авторизации отключены, и там не видно что какие-то запросы летят, хотя повторю ещё раз - ссылка что в класстрансляторе в первой строке поставлена правильная. Обратил внимание что в файле YggdrasilEnvironment у вас везде прописано localhost, повесил в локалхост логгер и увидел что запросы по прежнему летят в него. Т.е. у вас оно работает потому что вы поправили YggdrasilEnvironment , а ваше "В класс добавлен параметр-строка DOMAIN_NAME с началом хоста (http://localhost) для удобства редактирования в InClassTranslator'е." почему-то не работает.
Потестируйте пожалуйста ещё раз, или объясните мне пожалуйста где я косяк?
 
Хм. Потестил в общем вашу библиотеку и понял что она опять к сожалению не работает.
Потестируйте пожалуйста ещё раз, или объясните мне пожалуйста где я косяк?
Протестировал. Было забавно обнаружить, что проблема скрывалась в этом:
1.png
Компилятор не дурак: зачем ему делать ссылки на final-строку, если можно тупо подставить её при компиляции? :lol:
Убрал final, протестируйте, пожалуйста. (ссылку обновил)
 
Попробовал, прописал опять везде свои ссылки - вроде чего-то поменялось. Теперь в одиночке натягивается скин, т.е. ссыль на profile.php явно работает. В сервере всю папку аутхлиб на вашу пофикшенную с пофикшенным под меня классом заменил, и вот там всё-равно какая-то трабла. Пишет не удалось проверить имя пользователя. Я подменил сайт на логгер и увидел что как минимум на мой join.php не летят никакие данные, обращения есть а данных в POST или GET нет, хотя токен и ууид лаунчер клиенту отдал, т.е. чего-то видно поломалось в самом механизме авторизации, либо возможно я как всегда чего-то делаю не так. В общем теперь запросы летят на правильный домен, но данные не летят. Может всё-таки как-нибудь в YggdrasilEnvironment впихать текстовые строки, чтобы править прямо там?
 
Последнее редактирование:
Пишет не удалось проверить имя пользователя. Я подменил сайт на логгер и увидел что как минимум на мой join.php не летят никакие данные, обращения есть а данных в POST или GET нет, хотя токен и ууид лаунчер клиенту отдал, т.е. чего-то видно поломалось в самом механизме авторизации, либо возможно я как всегда чего-то делаю не так.

Проверил еще раз: у меня всё работает. Результаты в debug-логе:
Код:
[05.07.21][18:30:53]    [JOIN] Вызов скрипта. Метод: POST | Тип содержимого: application/json; charset=utf-8
[05.07.21][18:30:53]    [JOIN] Получены JSON-данные: {"accessToken":"9d399be6279e41d2a5344a0f26d63242","selectedProfile":"5e1e184e9f734cf9aa30ce6bef53254b","serverId":"22d128404f3ff1f656e85bd0209b622fa076e6e6"}
[05.07.21][18:30:53]    [JOIN] Запрос MySQL: SELECT id FROM players WHERE uuid="5e1e184e9f734cf9aa30ce6bef53254b" AND accessToken="9d399be6279e41d2a5344a0f26d63242";
[05.07.21][18:30:53]    [JOIN] Найдено результатов: 1
[05.07.21][18:30:53]    [JOIN] Запрос MySQL: UPDATE players SET serverID="22d128404f3ff1f656e85bd0209b622fa076e6e6" WHERE uuid="5e1e184e9f734cf9aa30ce6bef53254b" AND accessToken="9d399be6279e41d2a5344a0f26d63242";
[05.07.21][18:30:53]    [JOIN] Успешное выполнение скрипта! Выходим...
[05.07.21][18:30:53]    [HASJOINED] Вызов скрипта. Метод: GET
[05.07.21][18:30:53]    [HASJOINED] Запрос MySQL: SELECT username,uuid FROM players WHERE username="TaoGunner" AND serverId="22d128404f3ff1f656e85bd0209b622fa076e6e6"
[05.07.21][18:30:53]    [HASJOINED] Найдено результатов: 1
[05.07.21][18:30:53]    [HASJOINED] Успешное выполнение скрипта! Выходим...
Надо смотреть ваши скрипты.
 
Проверил еще раз: у меня всё работает. Результаты в debug-логе:
Код:
[05.07.21][18:30:53]    [JOIN] Вызов скрипта. Метод: POST | Тип содержимого: application/json; charset=utf-8
[05.07.21][18:30:53]    [JOIN] Получены JSON-данные: {"accessToken":"9d399be6279e41d2a5344a0f26d63242","selectedProfile":"5e1e184e9f734cf9aa30ce6bef53254b","serverId":"22d128404f3ff1f656e85bd0209b622fa076e6e6"}
[05.07.21][18:30:53]    [JOIN] Запрос MySQL: SELECT id FROM players WHERE uuid="5e1e184e9f734cf9aa30ce6bef53254b" AND accessToken="9d399be6279e41d2a5344a0f26d63242";
[05.07.21][18:30:53]    [JOIN] Найдено результатов: 1
[05.07.21][18:30:53]    [JOIN] Запрос MySQL: UPDATE players SET serverID="22d128404f3ff1f656e85bd0209b622fa076e6e6" WHERE uuid="5e1e184e9f734cf9aa30ce6bef53254b" AND accessToken="9d399be6279e41d2a5344a0f26d63242";
[05.07.21][18:30:53]    [JOIN] Успешное выполнение скрипта! Выходим...
[05.07.21][18:30:53]    [HASJOINED] Вызов скрипта. Метод: GET
[05.07.21][18:30:53]    [HASJOINED] Запрос MySQL: SELECT username,uuid FROM players WHERE username="TaoGunner" AND serverId="22d128404f3ff1f656e85bd0209b622fa076e6e6"
[05.07.21][18:30:53]    [HASJOINED] Найдено результатов: 1
[05.07.21][18:30:53]    [HASJOINED] Успешное выполнение скрипта! Выходим...
Надо смотреть ваши скрипты.

Добрый вечер. Потыкал ещё свои скрипты. Ошибку не нашёл, но постараюсь изложить чего нашёл.
В общем мой логгер не особо то видимо ловит json запросы, по этому я сразу и писал что запросы пустые - там всё нормально, все данные что лаунчер отдал клиенту летят уже от клиента на join.php как надо, и даже join.php в ответ ему как и положено не шлёт никаких ошибок а молча записывает полученный serverId. А вот дальше чего-то непонятное происходит, поскольку запрос на мой hasJoined.php не летит никакой. В клиенте вылезает ошибка которая уже из самого клиента а не которую какие-либо скрипты присылают: "Не удалось проверить имя пользователя!" - она там в файле переводов в клиенте лежит. В общем есть подозрение что либо запрос от сервера не летит вовсе, либо летит не туда где в аутлибе написано, хотя ссылки все проверил и как надо записал. В итоге сервак и не может проверить то что ему надо. Не понятно почему у меня так, а у вас работает. Может ещё чего-то где-то надо исправить? В сервере заменял всю папку authlib из вашей библиотеки с моими ссылками. Куда копать дальше не знаю, посмотрим как оно будет у других, ибо мне не к спеху, ибо просто с друзьями поиграть хотел. На всякий случай прикладываю пофикшенную аутлибу и картинки.
 

Вложения:

  • ошибка клиента.png
    ошибка клиента.png
    Размер файла
    94,9 КБ
    Просмотров
    19
  • ошибка сервера.png
    ошибка сервера.png
    Размер файла
    60,2 КБ
    Просмотров
    17
  • authlib-2.1.28.zip
    authlib-2.1.28.zip
    Размер файла
    63,9 КБ
    Просмотров
    2
Добрый вечер. Потыкал ещё свои скрипты. Ошибку не нашёл, но постараюсь изложить чего нашёл.
В общем мой логгер не особо то видимо ловит json запросы, по этому я сразу и писал что запросы пустые - там всё нормально, все данные что лаунчер отдал клиенту летят уже от клиента на join.php как надо, и даже join.php в ответ ему как и положено не шлёт никаких ошибок а молча записывает полученный serverId. А вот дальше чего-то непонятное происходит, поскольку запрос на мой hasJoined.php не летит никакой. В клиенте вылезает ошибка которая уже из самого клиента а не которую какие-либо скрипты присылают: "Не удалось проверить имя пользователя!" - она там в файле переводов в клиенте лежит. В общем есть подозрение что либо запрос от сервера не летит вовсе, либо летит не туда где в аутлибе написано, хотя ссылки все проверил и как надо записал. В итоге сервак и не может проверить то что ему надо. Не понятно почему у меня так, а у вас работает. Может ещё чего-то где-то надо исправить? В сервере заменял всю папку authlib из вашей библиотеки с моими ссылками. Куда копать дальше не знаю, посмотрим как оно будет у других, ибо мне не к спеху, ибо просто с друзьями поиграть хотел. На всякий случай прикладываю пофикшенную аутлибу и картинки.
Вот так парсятся json аргументы на php
$json = json_decode(file_get_contents('php://input'));
@$uuid = $json->selectedProfile;
@$token = @$json->accessToken;
@$serverid = $json->serverId;
 
Вот так парсятся json аргументы на php
$json = json_decode(file_get_contents('php://input'));
@$uuid = $json->selectedProfile;
@$token = @$json->accessToken;
@$serverid = $json->serverId;

Спасибо, это понятно) Не понятно почему запросы на hasJoined.php мой не летят от сервера.
 
Спасибо, это понятно) Не понятно почему запросы на hasJoined.php мой не летят от сервера.
Там своя аутлиба же в ядре. Тебе надо там тоже ссылки сменить. Если бумага, то запускать надо с джарника cache/patched_1.16.5.jar иначе перепатчит обратно на обычный.
 
Я вот эту папку полностью заменил в ядре на ту же аутлибу что в клиенте с пропатченными ссылками, сервер не бумага - форджевый, обычный. В форже нету вроде ничего больше похожего на аутлибу, в папке libraries тоже. Х.з. где чего не так, и не понятно ещё почему у ТС работает.
 

Вложения:

  • upload_2021-5-11_21-27-3.png
    upload_2021-5-11_21-27-3.png
    Размер файла
    138,4 КБ
    Просмотров
    13
Кстати а ничего не мешает попробовать запусить ванилу и проверить как оно будет на ней...
 
Кстати а ничего не мешает попробовать запусить ванилу и проверить как оно будет на ней...
Хы) Интересная инфа, в ваниле авторизация работает как часы, стало быть проблема не в моих скриптах, и не в аутлибе, а в том что не работает оно именно в ядре майна которое форж приносит с собой. Надо копать)
 

Вложения:

  • upload_2021-5-11_21-43-56.png
    upload_2021-5-11_21-43-56.png
    Размер файла
    516,4 КБ
    Просмотров
    18
Уже откопал за тебя. Даю подсказку:
  • В папке с сервером Forge удали файл minecraft_server.1.16.5.jar и попробуй запусти сервер через forge-1.16.5-36.1.16.jar. Будешь удивлён.
  • Загляни в \libraries\net\minecraft\server\ :lol:
 
Уже откопал за тебя. Даю подсказку:
  • В папке с сервером Forge удали файл minecraft_server.1.16.5.jar и попробуй запусти сервер через forge-1.16.5-36.1.16.jar. Будешь удивлён.
  • Загляни в \libraries\net\minecraft\server\ :lol:

Спасибо)
1) minecraft_server.1.16.5.jar - я его и фиксил, а он чего-то оказывается форжевому серверу не особо то и нужен. Запускал я всегда через forge-1.16.5-36.1.16.jar, но думал что ядро майносервера ванильного тоже как-то он подсасывает и эксплуатирует раз с собой приносит.
2) А вот это вот да, чёто там есть. Вечерком потычу, когда смотрел видать проглядел, спасибо)

З.Ы. Не плохо бы добавить подобные заметки для разных серверных ядер сразу к основному посту, чтобы потом не метались в догадках где чего фиксить остальные)
 
Везде в выше указанных местах всё пофиксил - авторизация работает! Спасибо)
 
Везде в выше указанных местах всё пофиксил - авторизация работает!
Очень рад. Тему постараюсь освежить и проверить библиотеку на самых часто используемых серверах.
 
Уже откопал за тебя. Даю подсказку:
  • В папке с сервером Forge удали файл minecraft_server.1.16.5.jar и попробуй запусти сервер через forge-1.16.5-36.1.16.jar. Будешь удивлён.
  • Загляни в \libraries\net\minecraft\server\ :lol:
Все правильно, новый forge использует деобфусцированный клиент и сервер.
 
Все правильно, новый forge использует деобфусцированный клиент и сервер.
Как человек, писавший Core-моды для Forge, пустил скупую мужскую соплю. Вспомнил, как каждый ASM-патч проверял с обфускацией и без неё, писал на это всё условия... :confused:

P.S.: Актуализировал первое сообщение темы​
 
Осталось дождаться когда спонж запилят под 1.16.5 и начнётся новая массовая миграция серверов на новые версии)
 

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

Назад
Верх