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:
Новый вход
Кто-то пытается войти в аккаунт.
Устройство
IP
Разрешить вход
Отклониь
Если игрок успел выйти до подтверждения, одобрение сохраняется на короткое время. При следующем входе с тем же fingerprint challenge используется один раз и становится `CONSUMED`.
Статусы challenge:
\- \`PENDING\`
\- \`APPROVED\`
\- \`REJECTED\`
\- \`EXPIRED\`
\- \`CONSUMED\`
В конфиге можно выбрать, делать ли устройство доверенным после успешного 2FA.
## Telegram и VK кабинет
У плагина есть общий backend для Telegram и VK. Интерфейс показывает только действия, которые реально применимы к текущему состоянию аккаунта.
Основные разделы:
- аккаунт;
- безопасность;
- 2FA;
- устройства;
- сессии;
- уведомления;
- статистика;
- привязки;
- настройки;
- debug-меню, если включено в конфиге.
В VK меню адаптировано под ограничения клавиатур: например, уведомления разбиты на страницы, а длинные названия показываются в тексте экрана.
## Уведомления о входе
После входа или auto-login AuthNast может отправить уведомление:
Вход в аккаунт
Игрок вошёл на сервер.
Устройство: iPad Pro
IP: 192.168.0.10
Авторизация: Доверенное устройство
Сегодня, 17:42
Кнопки:
- `
Это я`
- `
Это не я!`
Если нажать `
Это я`, событие отмечается подтверждённым, а кнопки убираются.
Если нажать `
Это не я!`, открывается 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.
Если будете использовать или изменять плагин, пожалуйста, сохраняйте подпись автора.
подробнее в readme и скачать на гит хабе
если будет время или кто то тоже сможет помочь то делайте деплоиды и или фиксы буду расматривать и принимать или форки на новыек пммп а то мне лень
еще поставьте лайк на пост если можно и звезду на репо..
















