Найти тему
Young programmer

О НЕТ ЭТО ЧТО YGGDRASIL ИЛИ КАК СОЗДАТЬ СКИН СИСТЕМУ MINECRAFT

Введение

В этой статье мы разберём как работает протокол авторизации YGGDRASIL, который широко используется в играх компании Mojang, как пример Minecraft. YggDrasil — это сетевой протокол который позволяет создать приватную сеть в которой передаваемая информация надёжно защищена от других участников соединения.

Эта Minecraft :)
Эта Minecraft :)

Как оно работает?

В данной системе авторизации нет ничего сложного сейчас мы разберём схему на примере того как она работает в Minecraft

Схема авторизации YggDrasil
Схема авторизации YggDrasil

В примере с видеоигрой Minecraft мы можем лицезреть, что у нас используется два сервера один игровой другой сервер авторизации. В начале этой схемы клиент посылает на сервер авторизации своё имя пользователя и пароль, далее происходит проверка на существование аккаунта и дальнейшая сверка пароля с тем который хранится у нас на сервере.

Если всё сошлось ты отправляем обратно клиенту его уникальный ключ авторизации (accessToken) и уникальный номер (UUID, зачастую это md5 хэш имени пользователя или электронной почты), по которому мы будем в дальнейшем авторизоваться на наш игровой сервер. После мы пытаемся зайти на сам игровой сервер, во время процедуры входа — игровой сервер отправляет запрос на сервер авторизации с вопросом знает ли он этого пользователя (запрос связанный с accessToken и serverId).

В случае если всё сошлось то мы впускаем игрока на игровой сервер.

Ничего не понятно? Идём дальше

Как работает понял, а как на практике?

В случае Minecraft'ом существует два запроса:

Join (Клиентская часть):

Отправляем POST запрос со следующими параметрами и с заголовком Content-Type: application/json.

  • accessToken
  • selectedProfile
  • serverId

Запрос будет иметь:

{
"accessToken": "<accessToken>",
"selectedProfile": "<player's uuid without dashes>",
"serverId": "<serverHash>"
}

hasJoined (Серверная часть):

Отправляем GET запрос со следующими параметрами.

  • username
  • serverId

Пример запроса:

https://sessionserver.mojang.com/minecraft/hasJoined?username=name&serverId=hash

Соответственно сервер вернёт нам ответ в виде профиля игрока:

{
"id": "<profile identifier>",
"name": "<player name>",

"properties": [

{
"name": "textures",
"value": "<base64 string>",
"signature": "<base64 string; signed data using private key>"
} ]
}

Полезные источники

Протокол Yggdrasil — сможет ли он изменить маршрутизацию в сетях
CJDNS мертв, да здравствует Yggdrasil
Yggdrasil — Википедия

Репозитории на Github

GitHub - PrismarineJS/node-yggdrasil: Node.js library to interact with Mojang's authentication system, known as Yggdrasil