Настройка аутентификации
В данный момент в Launcher реализованы 4 типа аутентификации:
accept- принимает любое имя пользователя и игнорирует ввод пароляreject- блокирует любую аутентификацию в Launcherjson- подключение к внешнему API для аутентификацииdb- подключение к базе данных. Поддерживается:MySQL,MariaDB,PostgreSQL,SQLite,Oracle Database,Microsoft SQL Server.
Для переключения между режимами измените блок auth в конфигурации.
Настройка типа Accept
auth:
{
type: accept
}Для уточнения:
Данный метод хранит данные аутентификации, в оперативной памяти и предназначен в основном для тестирования либо использования на закрытых серверах "для друзей".
Настройка типа Reject
auth:
{
type: reject
message: В данный момент ведутся технические работы, попробуйте позже
}Для уточнения:
Чаще всего этот тип используют в технических целях. Например для временного запрета входа в Launcher, на время технических работ.
Настройка типа Json
auth:
{
type: json
authUrl: http://example.com/auth
joinUrl: http://example.com/join
hasJoinedUrl: http://example.com/hasJoined
profileUrl: http://example.com/profile
profilesUrl: http://example.com/profiles
}Для уточнения:
Для того, что бы данный тип аутентификации работал, вы должны реализовать следующие запросы в своём API.
Настройка типа DB
auth:
{
type: db
passwordVerfier: hash(md5(pass + salt))
passwordSalt: randomSalt123
connection: {
// Возможные типы подключения: mysql, mariadb, postgres, sqlite, oracle и mssql
type: mysql
host: 127.0.0.1
port: 3306
username: userlauncher
password: password
database: mc
}
properties: {
tableName: users
uuidColumn: uuid
usernameColumn: username
passwordColumn: password
accessTokenColumn: accessToken
serverIdColumn: serverID
skinUrlColumn: skinURL
capeUrlColumn: capeURL
}
}Для работы этого способа авторизации вам нужно создать вручную все нужные таблицы в базе данных.
Вот пример SQL запроса для создание нужных таблиц:
-- Создаём таблицу с пользователями
CREATE TABLE `users` (
`id` SMALLINT(6) NOT NULL AUTO_INCREMENT,
`username` CHAR(30) NOT NULL,
`password` CHAR(64) NOT NULL,
`uuid` CHAR(36) NULL,
`accessToken` CHAR(36) NULL,
`serverID` VARCHAR(41) NULL,
`skinURL` TEXT NULL,
`capeURL` TEXT NULL,
UNIQUE INDEX `id` (`id`) USING BTREE
)
COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;
-- Создаём триггер на генерацию 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 ;-- Создаём таблицу с пользователями
CREATE TABLE "users" (
"id" SERIAL NOT NULL,
"username" CHAR(30) NOT NULL,
"password" VARCHAR(64) NOT NULL,
"uuid" CHAR(36) NULL DEFAULT gen_random_uuid(),
"accessToken" CHAR(36) NULL,
"serverID" VARCHAR(41) NULL,
"skinURL" TEXT NULL,
"capeURL" TEXT NULL
)Проверка пароля
Настройка поля passwordVerfier отвечает за проверку пароля и принимает следующие значения: hash, bcrypt, argon2.
Поле passwordSalt - опциональное, используется только в методе hash.
Пример использования:
bcrypt и argon2
Достаточно просто указать bcrypt или argon2 в поле passwordVerfier.
Например:
passwordVerfier: bcrypthash
Метод hash принимает в себя тело функции хеширования. Например у вас используется какая-нибудь старая CMS или ЛК и в нём проверка пароля реализована какой-либо устаревшей функцией хеширования пароля, например такой: md5(md5(пароль) + соль).
В таком случае Вам нужно указать следующее настройки:
passwordVerfier: hash(md5(md5(pass) + salt))
// здесь указывается ваша соль
passwordSalt: exampleSalt123Пример так называемого "двойного md5" будет выглядеть так:
passwordVerfier: hash(md5(md5(pass)))В данной схеме pass - это пароль, который вводит пользователь, salt - это соль, которая указывается в поле passwordSalt в настройках.
Функция hash принимает в себя различные варианты хеш-функций, например: md5, sha1, sha256, sha512 и т.д.