• Artemka3112

    Уровень 8
  • Изменено

Приступаем к настройке авторизации.

В новой версии Gravit Launcher используется новый метод авторизации AuthCoreProvider, который пришёл на замену AuthProvider, AuthHandler, HWIDHandler. Подробнее

Пример готовой конфигурации на MYSQL

"auth": {
    "std": {
      "core": {
        "type": "mysql",
        "mySQLHolder": {
          "address": "localhost",
          "port": 3306,
          "username": "launchserver",
          "password": "password",
          "database": "db?serverTimezone=UTC",
          "timezone": "UTC",
          "useHikari": true
        },
        "passwordVerifier": {
          "algo": "SHA256",
          "type": "digest"
        },
        "table": "users",
        "tableHwid": "hwids",
        "uuidColumn": "uuid",
        "usernameColumn": "username",
        "passwordColumn": "password",
        "accessTokenColumn": "accessToken",
        "hardwareIdColumn": "hwidId",
        "serverIDColumn": "serverID"
      },
      "textureProvider": {
        "skinURL": "http://example.com/skins/%username%.png",
        "cloakURL": "http://example.com/cloaks/%username%.png",
        "type": "request"
      },
      "isDefault": true,
      "displayName": "Default"
    }
} 

Описание конфигурации

address - адрес mysql сервера
port - порт mysql сервера
username - имя пользователя
password - пароль пользователя
database - база данных (до ?), после находится установка серверной таймзоны
timezone - установка клиентской таймзоны
useHikari - использовать ли HikariCP

passwordVerifier - ваш PasswordVerifier см подробнее в (Конфигурация PasswordVerifier)

textureProvider - отвечает за выдачу скинов и плащей

table - таблица
tableHwid - таблица c HWID uuidColumn - название столбца с uuid
usernameColumn - название столбца с именами пользователей
passwordColumn - название столбца с паролем пользователя
accessTokenColumn - название столбца с accessToken
hardwareIdColumn - название столбца с ID записи в таблице hwids
serverIDColumn - название столбца с serverID

Способы авторизации


Способ MySQL

Нажмите чтобы развернуть Нажмите чтобы скрыть

Этот способ подходит, если:

  • У вас есть сайт или сервис с БД MySQL/MariaDB, через который пользователи могут зарегистрироваться

  • У лаунчсервера есть прямой доступ к БД

  • В БД пароли хранятся в одном столбце, в таблице пользователей

Этот обработчик хранит все данные об авторизациях в MySQL-базе данных и использует готовые UUID . Этот обработчик рекомендуется использовать всем проектам по мере возможности. Пример конфигурации(не полной(пример полной выше)):

"auth": {
    "std": {
      "core": {
        "type": "mysql",
        "mySQLHolder": {
          "address": "localhost",
          "port": 3306,
          "username": "launchserver",
          "password": "password",
          "database": "db?serverTimezone=UTC",
          "timezone": "UTC",
          "useHikari": true
        },
      },
      "isDefault": true,
      "displayName": "Default"
    }
}, 

Далее вам нужно настроить подключение к вашей бд. Нужно заменить адресlocalhost, где расположена бд(если у вас бд стоит на том же сервере где и лаунчер то оставляйте localhost), имя пользователяlaunchserver, парольpassword и название базы данныхdb.

Далее мы настраиваем PasswordVerifier(см. в теме ниже "Конфигурация PasswordVerifier").

После настройки PasswordVerifier нужно выполнить такой sql запрос в вашей таблице:

-- Добавляет недостающие поля в таблицу
    ALTER TABLE users
    ADD COLUMN uuid CHAR(36) UNIQUE DEFAULT NULL,
    ADD COLUMN accessToken CHAR(32) DEFAULT NULL,
    ADD COLUMN serverID VARCHAR(41) DEFAULT NULL,
    ADD COLUMN hwidId BIGINT DEFAULT NULL,
    ADD COLUMN permission tinyint NOT NULL DEFAULT '0';

    -- Создаёт триггер на генерацию UUID для новых пользователей
    DELIMITER //
    CREATE TRIGGER setUUID BEFORE INSERT ON users
    FOR EACH ROW BEGIN
    IF NEW.uuid IS NULL THEN
    SET NEW.uuid = UUID();
    END IF;
    END; //
    DELIMITER ;

    -- Генерирует UUID для уже существующих пользователей
    UPDATE users SET uuid=(SELECT UUID()) WHERE uuid IS NULL;

    CREATE TABLE `hwids` (
  `id` bigint(20) NOT NULL,
  `publickey` blob,
  `hwDiskId` varchar(255) DEFAULT NULL,
  `baseboardSerialNumber` varchar(255) DEFAULT NULL,
  `graphicCard` varchar(255) DEFAULT NULL,
  `displayId` blob,
  `bitness` int(11) DEFAULT NULL,
  `totalMemory` bigint(20) DEFAULT NULL,
  `logicalProcessors` int(11) DEFAULT NULL,
  `physicalProcessors` int(11) DEFAULT NULL,
  `processorMaxFreq` bigint(11) DEFAULT NULL,
  `battery` tinyint(1) NOT NULL DEFAULT "0",
  `banned` tinyint(1) NOT NULL DEFAULT "0"
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `hwids`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `publickey` (`publickey`(255));
ALTER TABLE `hwids`
  MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT;
ALTER TABLE `users`
  ADD CONSTRAINT `users_hwidfk` FOREIGN KEY (`hwidId`) REFERENCES `hwids` (`id`);

где вам нужно везде заменить users на название таблицы с пользователями вашей cms. А также названия остальных столбиков на ваши.

Потом добавляем строчки с настройкой таблиц и настраиваем их(описание какая за что отвечает сверху):

        "table": "users",
        "tableHwid": "hwids",
        "uuidColumn": "uuid",
        "usernameColumn": "username",
        "passwordColumn": "password",
        "accessTokenColumn": "accessToken",
        "hardwareIdColumn": "hwidId",
        "serverIDColumn": "serverID"

по итогу у нас настройка конфига будет похожа на пример в начале.

Для работы HWID требуется - Настройка ProtectHandler

Важно

Начиная с 5.2.9 метод MySQL генерирует access и refresh токены. Refresh токен генерируется на основе имени пользователя, хеша пароля и секретной соли(legacySalt). После смены пароля access токен продолжит действовать в течении определенного в конфигурации времени и только после потребуется повторный вход. Если вы потеряете файлы в папке .keys лаунчсервера игроки будут вынуждены перелогинится.

Способ reject

Нажмите чтобы развернуть Нажмите чтобы скрыть

Принимает любые пары логин-пароль за неверные. Этот способ можно использовать во время проведения технических работ. Пример конфигурации:

"auth": {
  "std": {
    "core": {
      "type": "reject",
      "isDefault": true,
      "displayName": "Default"
    }
  } 
}

Способ Memory

Нажмите чтобы развернуть Нажмите чтобы скрыть

Не требует пароль для входа. Подходит для тестирования и серверов в локальной сети.

"auth": {
  "std": {
    "core": {
      "type": "memory",
      "isDefault": true,
      "displayName": "Default"
    }
  } 
}

Важно:

Этот метод никак не проверяет accessToken и serverId пользователя, а так же не гарантирует сохранения UUID после рестарта. Это означает, что на сервер можно войти с любого лаунчера под любым логином, а трафик minecraft может быть подвержен MITM атаке. Если вам необходимо контролировать вход на сервер и при этом у вас нет базы данных - используйте fileauthsystem.

Способ http

Для создания oAuth авторизации. (будет дописано позже) Подробнее

Способ fileauthsystem

Нажмите чтобы развернуть Нажмите чтобы скрыть

Система пользователей с хранением данных в файле .json

Для данного способа нужно установить модуль FileAuthSystem. Делается это следующим способом:

  1. В папке лаунчера переходим по пути /src/modules/build и далее открываем файл modules.zip. Берём файл FileAuthSystem_module.jar и положить его в папку /modules/.
  2. Запустить LaunchServer и прописать команду fileauthsystem install
  3. Зарегистрируйте пользователей командой config auth.std.core register [username] email [password]

Команды

Введите config auth.std.core и нажмите TAB для просмотра доступных команд

Конфигурация

  • autoSave - автоматически сохранить базу данных в файл при остановке LaunchServer
{
   "autoSave": true
}
  • Тип authCoreProvider fileauthsystem, конфигурация:
{
  "type": "fileauthsystem"
}
  • При установке через fileauthsystem install AuthCoreProvider будет установлен автоматически

Способ PostgreSQL

Нажмите чтобы развернуть Нажмите чтобы скрыть

Метод postgresql не работает с HWID на момент 5.2.7

Настройка +- аналогична mysql.

Поэтому далее просто примеры запросов и кфг.

SQL:

-- Добавляет недостающие поля в таблицу
ALTER TABLE users
ADD COLUMN uuid CHAR(36) UNIQUE DEFAULT NULL,
ADD COLUMN accessToken CHAR(32) DEFAULT NULL,
ADD COLUMN serverID VARCHAR(41) DEFAULT NULL;

-- Добавляет расширение для генерации UUID
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- Добавляет триггер для генерации UUID
CREATE OR REPLACE FUNCTION public.users_uuid_trigger_func()
    RETURNS trigger
    LANGUAGE plpgsql
AS $function$
    BEGIN
        new.uuid = (SELECT uuid_generate_v4());
        return new;
    END;
$function$
CREATE trigger users_uuid_trigger
    BEFORE INSERT ON users
    FOR EACH ROW
    EXECUTE PROCEDURE users_uuid_trigger_func();

-- Генерирует UUID для уже существующих пользователей
UPDATE users SET uuid=(SELECT uuid_generate_v4()) WHERE uuid IS NULL;

Пример конфига:

"std": {
      "core": {
        "type": "postgresql",
        "postgresSQLHolder": {
          "addresses": ["localhost"],
          "ports": [5432],
          "username": "user",
          "password": "pass",
          "database": "db",
          "timezone": "UTC",
          "useHikari": true
        },
        "passwordVerifier": {
          "algo": "SHA256",
          "type": "digest"
        },
        "expireSeconds": 3600,
        "table": "users",
        "tableHwid": "hwids",
        "uuidColumn": "uuid",
        "usernameColumn": "username",
        "passwordColumn": "password",
        "accessTokenColumn": "accessToken",
        "serverIDColumn": "serverID"
      },
      "textureProvider": {
        "skinURL": "http://example.com/skins/%username%.png",
        "cloakURL": "http://example.com/cloaks/%username%.png",
        "type": "request"
      },
      "isDefault": true,
      "displayName": "Default"
    }

Важно

Начиная с 5.2.9 метод PostgreSQL генерирует access и refresh токены. Refresh токен генерируется на основе имени пользователя, хеша пароля и секретной соли(legacySalt). После смены пароля access токен продолжит действовать в течении определенного в конфигурации времени и только после потребуется повторный вход. Если вы потеряете файлы в папке .keys лаунчсервера игроки будут вынуждены перелогинится.

Конфигурация PasswordVerifier

Нажмите чтобы развернуть Нажмите чтобы скрыть

DOUBLE DIGEST - хеширует пароль выбранным алгоритмом дважды. toHexMode перед вторым раундом хеширования переведет хеш в HEX формат. Поддерживаются любые алгоритмы, реализованные в Java или BouncyCastle

    "passwordVerifier": {
      "algo": "SHA256",
      "toHexMode": true,
      "type": "doubleDigest"
    }

DIGEST - хеширует пароль выбранным алгоритмом. Поддерживаются любые алгоритмы, реализованные в Java или BouncyCastle

    "passwordVerifier": {
      "algo": "SHA256",
      "type": "digest"
    }

Далее идут методы шифрования доступные только после добавления модуля AddionalHash.

Установка модуля

  1. В папке лаунчера переходим по пути /src/modules/build и далее открываем файл modules.zip. Берём файл AdditionalHash_module.jar и положить его в папку /modules/.

  2. Скачать библиотеку jbcrypt-0.4.jar и положить в папку **/libraries/**😀

       wget https://repo1.maven.org/maven2/org/mindrot/jbcrypt/0.4/jbcrypt-0.4.jar mv jbcrypt-0.4.jar /LaunchServer/libraries/
  3. Выполнить настройку auth provider (имеется ввиду вписать тип шифрования)

BCRYPT - проверяет пароль по алгоритму BCrypt(password_verify в PHP)

    "passwordVerifier": {
      "type": "bcrypt"
    }

WORDPRESS PHPASS - проверяет пароль по алгоритму phpass(WordPress)

    "passwordVerifier": {
      "type": "phpass"
    }

Страница на официальном wiki

Написать ответ...