Настройка авторизации
Пример готовой конфигурации
"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"
},
"expireSeconds": 7200,
"table": "users",
"tableHwid": "hwids",
"uuidColumn": "uuid",
"usernameColumn": "username",
"passwordColumn": "password",
"accessTokenColumn": "accessToken",
"hardwareIdColumn": "hwidId",
"serverIDColumn": "serverID"
},
"textureProvider": {
"skinURL": "https://example.com/skins/%username%.png",
"cloakURL": "https://example.com/cloaks/%username%.png",
"type": "request"
},
"isDefault": true,
"displayName": "Default"
}
}
Описание конфигурации
address
- адрес mysql сервераport
- порт mysql сервераusername
- имя пользователяpassword
- пароль пользователяdatabase
- база данных (до ?), после находится установка серверной таймзоныtimezone
- установка клиентской таймзоныuseHikari
- использовать ли HikariCPpasswordVerifier
- ваш PasswordVerifier см подробнее в PasswordVerifiertextureProvider
- отвечает за выдачу скинов и плащей TextureProviderexpireSeconds
- время работы accessToken (сек) table
- таблицаtableHwid
- таблица c HWIDuuidColumn
- название столбца с uuidusernameColumn
- название столбца с именами пользователейpasswordColumn
- название столбца с паролем пользователяaccessTokenColumn
- название столбца с accessTokenhardwareIdColumn
- название столбца с ID записи в таблице hwidsserverIDColumn
- название столбца с serverID
Система скинов и плащей (TextureProvider)
Способ Void
Скины и плащи полностью отключены. Пример конфигурации:
"textureProvider": {
"type": "void"
},
Способ Request
В данном способе скины и плащи настраиваются всего двумя параметрами - маской URL на PNG-файл. Пример конфигурации:
"textureProvider": {
"skinURL": "https://example.com/skins/%username%.png",
"cloakURL": "https://example.com/cloaks/%username%.png",
"type": "request"
},
У данного способа есть существенный минус - нет поддержки slim скинов
Способ Json
Готовая реализация выдачи скинов, плащей, слим скинов php-скрипт от микровина
"textureProvider": {
"url": "https://example.com/TextureProvider.php?login=%uuid%",
"type": "json"
},
Конфигурация PasswordVerifier
"passwordVerifier": {
"algo": "SHA256",
"type": "digest"
}
"passwordVerifier": {
"algo": "SHA256",
"toHexMode": true,
"type": "doubleDigest"
}
"passwordVerifier": {
"type": "bcrypt"
}
"passwordVerifier": {
"type": "phpass"
}
digest
- хеширует пароль выбранным алгоритмом. Поддерживаются любые алгоритмы, реализованные в Java или BouncyCastledoubleDigest
- хеширует пароль выбранным алгоритмом дважды. toHexMode
перед вторым раундом хеширования переведет хеш в HEX формат. Поддерживаются любые алгоритмы, реализованные в Java или BouncyCastlebcrypt
(Модуль AddionalHash
) - проверяет пароль по алгоритму BCrypt(password_verify в PHP)phpass
(Модуль AddionalHash
) - проверяет пароль по алгоритму phpass(WordPress)
Способы авторизации
Способ reject
Принимает любые пары логин-пароль за неверные. Этот способ можно использовать во время проведения технических работ. Пример конфигурации:
"auth": {
"std": {
"core": {
"type": "reject",
},
"isDefault": true,
"displayName": "Default"
}
}
Способ Memory
Подходит для тестирования. Не требует пароль для входа.
"auth": {
"std": {
"core": {
"type": "memory",
},
"isDefault": true,
"displayName": "Default"
}
}
Способ MySQL
Этот обработчик хранит все данные об авторизациях в MySQL-базе данных, использует UUID готовые. Этот обработчик рекомендуется использовать всем проектам по мере возможности. Пример конфигурации:
"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"
},
"expireSeconds": 7200,
"table": "users",
"tableHwid": "hwids",
"uuidColumn": "uuid",
"usernameColumn": "username",
"passwordColumn": "password",
"accessTokenColumn": "accessToken",
"serverIDColumn": "serverID"
},
"isDefault": true,
"displayName": "Default"
}
}
Для того чтобы добавить недостающие поля и сгеренерировать UUID, можно использовать 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;
-- Создаёт триггер на генерацию 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`);
Способ PostgreSQL
Этот обработчик хранит все данные об авторизациях в PostgreSQL-базе данных, использует UUID готовые. Пример конфигурации:
"auth": {
"std": {
"core": {
"type": "postgresql",
"postgresSQLHolder": {
"addresses": ["localhost"],
"ports": [5432],
"username": "username",
"password": "password",
"database": "database",
"timezone": "UTC",
"useHikari": true
},
"passwordVerifier": {
"algo": "SHA256",
"type": "digest"
},
"expireSeconds": 7200,
"table": "users",
"tableHwid": "hwids",
"uuidColumn": "uuid",
"usernameColumn": "username",
"passwordColumn": "password",
"accessTokenColumn": "accessToken",
"serverIDColumn": "serverID"
},
"isDefault": true,
"displayName": "Default"
}
}
Для того чтобы добавить недостающие поля и сгеренерировать UUID, можно использовать 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;
Способ FileAuthSystem
Система пользователей с хранением данных в файле .json
Установка модуля
- Скопировать модуль FileAuthSystem_module.jar в папку /LaunchServer/modules/
- Запустить LaunchServer и прописать команду
fileauthsystem install
- Зарегистрируйте пользователей командой
config auth.std.core register [username] email [password]
- Всё!
Команды
Введите config auth.std.core
и нажмите TAB для просмотра доступных команд
Конфигурация
- autoSave - автоматически сохранить базу данных в файл при остановке LaunchServer
{
"autoSave": true
}
- Тип authCoreProvider
fileauthsystem
, конфигурация:
{
"type": "fileauthsystem"
}
- При установке через
fileauthsystem install
AuthCoreProvider будет установлен автоматически