StaffAuth
Обзор
StaffAuth защищает аккаунты персонала. Когда игрок заходит на сервер и у него есть право персонала (по умолчанию security.admin), он замораживается, пока не пройдёт аутентификацию: он не может двигаться, взаимодействовать, ломать и ставить блоки, открывать инвентари, писать в чат, сражаться или использовать команды, кроме /staffauth. Сотрудник без пароля задаёт его при первом входе; затем он входит с ним.
Пароли никогда не передаются аргументами команд и не вводятся в чат. Их вводят в поле диалога Paper или на необязательном меню с цифровой клавиатурой, а хранятся они только как хеши BCrypt в артефакте TypeWriter. Неудачные попытки ограничиваются по частоте с растущей задержкой и могут привести к исключению игрока.
Каждый игрок удерживается примерно на один тик при входе, пока загружаются его права, беззвучно, чтобы медленный бэкенд прав никогда не пропустил персонал без проверки. Игроки, не являющиеся персоналом, затем освобождаются; если права не установлены в течение 10 секунд, игрока исключают с пояснением.
Возможности
- Заморозка при входе — неаутентифицированный персонал не может двигаться, взаимодействовать, строить, выбрасывать, подбирать, употреблять, рыбачить, получать и наносить урон, писать в чат или выполнять команды.
- Регистрация и вход — персонал впервые регистрируется, дважды вводя пароль; остальные входят.
- Хранение хешей — сохраняются только хеши BCrypt с настраиваемым коэффициентом стоимости.
- Ограничения попыток — задержка, удваивающаяся после каждой неудачи (до 60 секунд), и исключение после
maxAttemptsнеудач. - Тайм-аут сессии — по желанию возвращает аутентифицированный персонал на экран входа через заданное число минут.
- Диалог или клавиатура — по умолчанию поле ввода в диалоге Paper, плюс необязательное меню с цифровой клавиатурой, построенное из макета GUI.
- Инструменты администратора — сброс сохранённого пароля или принудительный выход.
- Необязательное расширение Permissions — ждёт загрузки прав, прежде чем решать, кто является персоналом.
Установка
- Установите расширение GUI: диалог входа и меню с клавиатурой открываются через него. Без него
/staffauthотвечает, что интерфейс недоступен. - По желанию установите расширение BTC Permissions, если ваши серверы загружают права из базы данных; StaffAuth обнаруживает его автоматически.
- Положите JAR-файл StaffAuth в
plugins/Typewriter/extensions/и перезапустите сервер. - Выдайте право персонала (
security.admin) аккаунтам, которые должны проходить аутентификацию.
Быстрый старт
- В веб-панели TypeWriter откройте страницу static и добавьте артефакт Staff Auth Passwords. Никогда не меняйте его
artifactIdвпоследствии, иначе сохранённые пароли будут потеряны. - На той же странице добавьте одну запись Staff Auth Config. Проверьте
staffPermission,adminPermission,maxAttempts,minPasswordLength,bcryptCostи сообщения. - Опубликуйте. StaffAuth нужны обе записи: без конфигурации он ничего не делает, а без артефакта персонал пропускается (в лог записывается ошибка).
- Зайдите с тестового аккаунта, у которого есть право персонала. Вы заморожены, и вас просят зарегистрироваться: введите пароль в диалоге, затем подтвердите его.
- Переподключитесь: теперь диалог запрашивает пароль.
- По желанию: добавьте действие Staff Auth Menu, чтобы использовать клавиатуру. См. ниже.
StaffAuth использует первый найденный Staff Auth Config и первый найденный артефакт Staff Auth Passwords. Не создавайте несколько.
Как это работает
Аутентификация длится, пока игрок не покинет сервер (состояние хранится только в памяти) или не истечёт необязательный тайм-аут сессии. Пока действуют ограничения, разрешена только команда /staffauth (и /sa, которая лишь исключена из блокировки; псевдонимом она не регистрируется).
Меню
Вход, /staffauth, login и register открывают диалог Paper с полем ввода текста. При регистрации диалог показывается второй раз для подтверждения пароля. Текст приглашения берётся из guiLoginPrompt, заголовок — из guiTitle.
Действие Staff Auth Menu вместо этого открывает инвентарную клавиатуру (только цифры). Запускайте его из цепочки действий, если вам нравится такой вид. В его layoutPool задайте предметам тип кнопки, чтобы превратить их в клавиши:
| Тип кнопки | Функция |
|---|---|
DIGIT_0 до DIGIT_9 | Добавляет цифру к паролю. |
PASSWORD_DISPLAY | Показывает по одной точке на каждую введённую цифру. |
LOGIN / REGISTER | Отправляет пароль; подпись — Register, когда у игрока ещё нет пароля. |
BACKSPACE | Удаляет последнюю цифру. |
CANCEL | Очищает ввод и закрывает меню. |
На клавиатуре можно набирать только цифры, а пароль по-прежнему должен соответствовать minPasswordLength. useGuiWhenAvailable определяет, открывается ли диалог автоматически при входе.
Конфигурация
Всё задаётся в записях. В полях сообщений используйте {attempts}, {max} и {length} как плейсхолдеры (фигурные скобки, а не теги MiniMessage): {attempts} и {max} в wrongPasswordMessage, {attempts} в maxAttemptsKickMessage, {length} (минимум) и {max} в passwordTooShortMessage.
Пароли хранятся в файле артефакта, выбранном через artifactId, в виде JSON-соответствия UUID игрока и хеша BCrypt. Артефакт кэшируется на 5 секунд.
Команды
Название команды берётся из поля commandName конфигурации (по умолчанию staffauth). У базовой команды нет зарегистрированного права: выполнить её может любой, но эффект она даёт только для персонала. Административные подкоманды требуют права, заданного в adminPermission.
| Команда | Описание |
|---|---|
/staffauth | Открывает диалог входа или регистрации. |
/staffauth open, login, register | То же, что выше. |
/staffauth logout | Завершает вашу аутентификацию и снова показывает диалог. |
/staffauth status | Показывает ваше состояние, есть ли у вас право персонала и доступен ли GUI. |
/staffauth reset <player> | Удаляет сохранённый пароль игрока (имя или UUID), после чего ему нужно зарегистрироваться снова. Требует adminPermission. |
/staffauth force-logout <player> | Выводит игрока в сети из аккаунта и показывает ему диалог. Требует adminPermission. |
Права
Права — это настраиваемые поля, а не фиксированные узлы.
| Право | Даёт доступ к |
|---|---|
security.admin (staffPermission) | Помечает игрока как персонал: он должен проходить аутентификацию. |
security.staffauth.admin (adminPermission) | /staffauth reset и /staffauth force-logout. |
Записи
Записей: 3, сгенерированы из исходного кода расширения.
Действия1
- Staff Auth MenuStaff Auth Menu
Команды1
- Staff Auth ConfigStaff Auth Config
Артефакты1
- Staff Auth DataStaff Auth Passwords
Устранение неполадок
Персонал заходит, и у него не спрашивают пароль. Проверьте, что опубликованы и конфигурация, и артефакт. Без артефакта StaffAuth пропускает персонал и пишет в лог StaffAuth has no artifact entry. Также проверьте, что у игрока действительно есть staffPermission (его выводит /staffauth status).
Игрока исключают с сообщением о правах. Расширение Permissions не сообщило, что права игрока загружены, в течение 10 секунд. Переподключитесь; если проблема сохраняется, проверьте бэкенд Permissions в логах.
The StaffAuth interface is unavailable. Расширение GUI не загружено. Установите его и перезапустите.
Пароли пропали. artifactId артефакта был изменён или запись была создана заново. Восстановите прежний id. Сохранённое значение, не являющееся корректным UUID или строкой BCrypt, приводит к ошибке загрузки и записывается в лог как StaffAuth artifact could not be loaded; игрок остаётся замороженным, и ему сообщают, что его состояние нечитаемо.
Регистрация отклонена. Пароль должен содержать от minPasswordLength (6) до maxPasswordLength (128) символов и не содержать пробелов или управляющих символов. Два ввода должны совпадать.
Игрока исключают после неудачных попыток входа. После maxAttempts (по умолчанию 5) неудач игрока исключают с maxAttemptsKickMessage. Задайте maxAttempts равным 0, чтобы отключить исключения; задержка всё равно применяется. /staffauth reset <player> сбрасывает забытый пароль.
Связанные расширения
- GUI — открывает диалог входа и меню с клавиатурой.