AuthNast v4.0.0 — регистрация, 2FA, Telegram/VK, устройства и статистика для Aquamarine

AuthNast — плагин авторизации и защиты аккаунтов для серверов Minecraft Bedrock на ядре Aquamarine. Он закрывает обычную регистрацию/логин, добавляет доверенные устройства, блокировку подозрительных устройств, активные сессии, 2FA через Telegram/VK, уведомления о входах, QR-привязку социальных сетей и игровую статистику.

Изначально этот плагин делался на заказ для одного сервера. Сервер давно закрылся, а плагин остался, поэтому я довела его до более нормального состояния и публикую для тех, кому нужна современная система защиты аккаунтов.

Спойлер

# Требования

- Ядро: Aquamarine.

- Проверялось на Aquamarine 1.1.4.

- API ядра: 3.0.1.

- PHP: 8.3 или новее.

- Обязательные расширения PHP: PDO, SQLite/PDO SQLite или PDO MySQL, cURL, JSON.

- Для QR по скриншотам: GD.

- Для сборки release-архива: ZipArchive.

- Опционально: PurePerms для отображения группы игрока.

# Что умеет AuthNast

## Регистрация и вход

Игрок регистрирует аккаунт прямо на сервере. Пароль вводится в защищённый диалог: сообщение перехватывается плагином и не публикуется в общий чат. Пока игрок не авторизован, AuthNast блокирует движение, взаимодействие с блоками, бой, предметы, обычный чат и лишние команды.

После успешного входа плагин создаёт игровую сессию, обновляет устройство, пишет security event и может отправить уведомление в Telegram/VK.

## Устройства

AuthNast разделяет несколько разных понятий:

- доверенное устройство — разрешён автоматический вход;

- известное, но недоверенное устройство — нужно вводить пароль;

- заблокированное устройство — вход запрещён;

- активная сессия — игрок сейчас авторизован на сервере.

Устройство блокируется по fingerprint, а не просто по IP. При блокировке активная сессия этого устройства завершается, доверие снимается, следующий вход с этого fingerprint отклоняется.

## 2FA

Если включена 2FA и игрок входит с нового или недоверенного устройства, после правильного пароля он ещё не считается авторизованным. Плагин создаёт persistent challenge и отправляет запрос в Telegram/VK:

:shield: Новый вход

Кто-то пытается войти в аккаунт.

:mobile_phone: Устройство

:globe_with_meridians: IP

:white_check_mark: Разрешить вход

:prohibited: Отклониь

Если игрок успел выйти до подтверждения, одобрение сохраняется на короткое время. При следующем входе с тем же fingerprint challenge используется один раз и становится `CONSUMED`.

Статусы challenge:


\- \`PENDING\`

\- \`APPROVED\`

\- \`REJECTED\`

\- \`EXPIRED\`

\- \`CONSUMED\`

В конфиге можно выбрать, делать ли устройство доверенным после успешного 2FA.

## Telegram и VK кабинет

У плагина есть общий backend для Telegram и VK. Интерфейс показывает только действия, которые реально применимы к текущему состоянию аккаунта.

Основные разделы:

- аккаунт;

- безопасность;

- 2FA;

- устройства;

- сессии;

- уведомления;

- статистика;

- привязки;

- настройки;

- debug-меню, если включено в конфиге.

В VK меню адаптировано под ограничения клавиатур: например, уведомления разбиты на страницы, а длинные названия показываются в тексте экрана.

## Уведомления о входе

После входа или auto-login AuthNast может отправить уведомление:

:green_circle: Вход в аккаунт

Игрок вошёл на сервер.

:mobile_phone: Устройство: iPad Pro

:globe_with_meridians: IP: 192.168.0.10

:key: Авторизация: Доверенное устройство

:one_o_clock: Сегодня, 17:42

Кнопки:

- `:white_check_mark: Это я`

- `:police_car_light: Это не я!`

Если нажать `:white_check_mark: Это я`, событие отмечается подтверждённым, а кнопки убираются.

Если нажать `:police_car_light: Это не я!`, открывается incident-меню с защитными действиями: завершить сессию, убрать доверие с устройства, заблокировать устройство, завершить остальные сессии, сменить пароль или настроить 2FA.

## QR-привязка Telegram/VK

Игрок пишет `/tg` или `/vk`, получает карту с QR-кодом в первый слот hotbar, карта сразу выбирается. Если первый слот занят, предмет переносится в обычный инвентарь. QR одноразовый, подписанный и ограниченный по времени.

После успешной привязки:

- token становится `USED`;

- старая фотография QR больше бесполезна;

- карта удаляется только по конкретному token/provider;

- inventory синхронизируется, чтобы не было ghost item;

- скриншот в Telegram/VK отправляется на удаление, чтобы не засорять чат.

## Сессии

Можно смотреть активные сессии, последнюю активность, IP, устройство и способ авторизации. Если действие неприменимо, кнопка не показывается. Например, если сессии уже нет, кнопка завершения не рисуется.

## Статистика

AuthNast собирает:

- время игры;

- входы;

- игровые сессии;

- сломанные и поставленные блоки;

- пройденную дистанцию;

- смерти;

- убийства;

- убийства игроков;

- прыжки, если событие доступно;

- урон, если API ядра позволяет.

Движение до авторизации, телепорты, respawn, смена мира и огромные скачки координат не считаются как обычная дистанция.

## Public API

Другие плагины могут получать данные через `authnast\api\AuthNastAPI`, а не читать SQLite напрямую.

Примеры возможностей API:

- проверить, авторизован ли игрок;

- получить account id;

- получить безопасную информацию аккаунта;

- получить статистику;

- получить playtime;

- проверить Telegram/VK привязки;

- получить активные сессии;

- добавить custom statistic;

- зарегистрировать свой placeholder для welcome-сообщения.

## Custom Welcome

После авторизации можно включить красивое приветствие с placeholder’ами:

\`\`\`yaml

welcome:

enabled: true

delay-ticks: 10

messages:
- "§8━━━━━━━━━━━━━━━━━━━━"

- "§bДобро пожаловать, §f{PLAYER}!"

- "§7Группа: §f{GROUP}"

- "§7Вход: §f{AUTH_METHOD}"

- "§7Онлайн: §f{ONLINE}/{MAX_PLAYERS}"

- "§8━━━━━━━━━━━━━━━━━━━━"

Поддерживаются `{PLAYER}`, `{DISPLAY_NAME}`, `{ACCOUNT_ID}`, `{GROUP}`, `{SERVER_NAME}`, `{ONLINE}`, `{MAX_PLAYERS}`, `{AUTH_METHOD}`, `{DEVICE}`, `{IP}`, `{DATE}`, `{TIME}`, `{PLAYTIME}`, `{TG_LINKED}`, `{VK_LINKED}`, `{2FA}`.

# Команды

- `/auth`

- `/account`

- `/password`

- `/tg`

- `/vk`

- `/tgdisconnect`

- `/vkdisconnect`

- `/2fa`

- `/devices`

- `/sessions`

- `/logout`

- `/notifications`

- `/security`

- `/stats`

- `/lang`

- `/authnast reload|dbstatus|botstatus`

# База данных

Поддерживаются два режима:

\`\`\`yaml

database:

type: local

\`\`\`

или:


\`\`\`yaml

database:

type: mysql

\`\`\`

`local` использует SQLite. `mysql` использует только MySQL/MariaDB. Если MySQL недоступен, AuthNast не переключается автоматически на SQLite, чтобы случайно не создать две разные базы аккаунтов.

Миграции выполняются автоматически при запуске. Для SQLite перед изменением схемы создаётся backup.

# PurePerms

PurePerms — необязательная зависимость. Если он установлен и включён в конфиге AuthNast, плагин показывает группу игрока в аккаунте и welcome-сообщении. Цветовые коды `§` и `&` очищаются. Если PurePerms выключен или отсутствует, группа просто не выводится.

# Скриншоты для темы


Подпись: личный кабинет игрока с аккаунтом, безопасностью, 2FA, устройствами, сессиями, уведомлениями и статистикой.

## Скриншот 2 — главное меню VK


Подпись: VK-версия использует тот же backend, но интерфейс адаптирован под ограничения VK-клавиатур.

## Скриншот 3 — QR-карта в Minecraft


Подпись: одноразовая QR-карта для привязки Telegram или VK. Карта выдаётся в первый слот hotbar и удаляется после успешной привязки.

## Скриншот 4 — уведомление о входе


Подпись: игрок может подтвердить вход или открыть security incident, если вход подозрительный.

## Скриншот 5 — 2FA approval



Подпись: вход с нового устройства требует подтверждения через Telegram/VK.

## Скриншот 6 — устройства и сессии

Подпись: управление доверенными, недоверенными и заблокированными устройствами, просмотр и завершение активных сессий.

# Установка

1. Скопируйте папку `authnast` в `plugins/authnast`.

2. Убедитесь, что сервер запускается на PHP 8.3+.

3. Запустите Aquamarine один раз: плагин создаст рабочие директории, SQLite-базу и `secrets.yml`.

4. Остановите сервер.

5. Настройте `config.yml`.

6. Впишите Telegram/VK tokens в `secrets.yml`.

7. Запустите сервер снова.

# Настройка Telegram

Создайте бота через BotFather, получите token и впишите его в `secrets.yml`. В `config.yml` включите Telegram и укажите username бота. Для обычного сервера достаточно polling, webhook не нужен.

# Настройка VK

Создайте или откройте сообщество VK:

1. Включите сообщения сообщества.

2. Включите Bots Long Poll.

3. Включите события `message_new` и `message_event`.

4. Выпустите access token сообщества с правами на сообщения и управление сообществом.

5. Укажите token в `secrets.yml`, а ID группы — в `config.yml`.

# Безопасность

- Пароли не отправляются в Telegram/VK.

- Social tokens хранятся в `secrets.yml`.

- Fingerprint устройства подписывается HMAC-секретом.

- QR payload подписан и одноразовый.

- Bot unlink требует пароль и подтверждение.

- Debug-меню не показывает tokens, hashes и другие секреты.

#Автор

Авторская подпись в файлах:

A.K.

https://devo4ka.top/

Если будете использовать или изменять плагин, пожалуйста, сохраняйте подпись автора.

подробнее в readme и скачать на гит хабе

если будет время или кто то тоже сможет помочь то делайте деплоиды и или фиксы буду расматривать и принимать или форки на новыек пммп а то мне лень

еще поставьте лайк на пост если можно и звезду на репо..

1 лайк

О блят ь что это нахуй такое
Тебе что делать вообще нехуй?

почему так агрессивно?) пояснила же плагин старый вот решила выложить.

это же шутка) меня просто посмешила эта стена текста

1 лайк

мне лень было описывать кинула задачу иишке извините я ленивая, зато описал прям супер))

но плагин действительно классный как по мне))

завтра дочитаю

Ладно читать лень

плагин xуйня потому что стена текста и 1.1.5 :zany_face:

короче посмотрел сайт девочки
это тоже $$vibecode

Поясни за слова про 1.1.5

Ты глупый ребёнок который подшарил за майнкрафт и вайкодишь. 1.1.5 старше тебя, это версия лучше всех.

1.1.5 хyйня

А ещё я вайбкодер и маленький ребенок, что ты мне сделаешь

1 лайк

Конец.

1,1.5 не ху йня, просто версия уже пережила свое время, вот и все!!!, а еще я писала что плагин старый вот и 1.1.5, да немного подшаманила перед публикацией но все же, оправдываться и/или пояснять не вижу смысла больше.

Ради бога 10 раз

1.1.5 старая. Отправь ты его ска уже на покой!

А теперь посмотрим на другие сообщения

Пользователь Limbo2:

Не бро, эта версия старше тебя и лучше всех, понял?

аааыыыыыы aiiiiiiiiii о нет вайбкод фууууууу ыыыAdobe Express - 1401508057309991100

еще и с чего ты взял что ии?. Описание да, и readme мне лень было самой. Гуляй давай и не пиши мне больше выбоядок я тебе ранее писала что бы ты не писл мне. повторяю.

1 лайк

Насть, ты ебанулась?

1 лайк