Перейти к основному содержимому

StaffAuth

Аккаунты персонала замораживаются при входе, пока они не авторизуются паролем с хешем BCrypt.

Приватныеv0.0.2Утилиты
ТребуетсяTypeWriter0.9.0-beta-177 (BTC build)GUIPermissionsнеобязательно

Создано для сети BornToCraft. Это расширение описано для справки и не распространяется.

Обзор​

StaffAuth защищает аккаунты персонала. Когда игрок заходит на сервер и у него есть право персонала (по умолчанию security.admin), он замораживается, пока не пройдёт аутентификацию: он не может двигаться, взаимодействовать, ломать и ставить блоки, открывать инвентари, писать в чат, сражаться или использовать команды, кроме /staffauth. Сотрудник без пароля задаёт его при первом входе; затем он входит с ним.

Пароли никогда не передаются аргументами команд и не вводятся в чат. Их вводят в поле диалога Paper или на необязательном меню с цифровой клавиатурой, а хранятся они только как хеши BCrypt в артефакте TypeWriter. Неудачные попытки ограничиваются по частоте с растущей задержкой и могут привести к исключению игрока.

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

Возможности​

  • Заморозка при входе — неаутентифицированный персонал не может двигаться, взаимодействовать, строить, выбрасывать, подбирать, употреблять, рыбачить, получать и наносить урон, писать в чат или выполнять команды.
  • Регистрация и вход — персонал впервые регистрируется, дважды вводя пароль; остальные входят.
  • Хранение хешей — сохраняются только хеши BCrypt с настраиваемым коэффициентом стоимости.
  • Ограничения попыток — задержка, удваивающаяся после каждой неудачи (до 60 секунд), и исключение после maxAttempts неудач.
  • Тайм-аут сессии — по желанию возвращает аутентифицированный персонал на экран входа через заданное число минут.
  • Диалог или клавиатура — по умолчанию поле ввода в диалоге Paper, плюс необязательное меню с цифровой клавиатурой, построенное из макета GUI.
  • Инструменты администратора — сброс сохранённого пароля или принудительный выход.
  • Необязательное расширение Permissions — ждёт загрузки прав, прежде чем решать, кто является персоналом.

Установка​

  1. Установите расширение GUI: диалог входа и меню с клавиатурой открываются через него. Без него /staffauth отвечает, что интерфейс недоступен.
  2. По желанию установите расширение BTC Permissions, если ваши серверы загружают права из базы данных; StaffAuth обнаруживает его автоматически.
  3. Положите JAR-файл StaffAuth в plugins/Typewriter/extensions/ и перезапустите сервер.
  4. Выдайте право персонала (security.admin) аккаунтам, которые должны проходить аутентификацию.

Быстрый старт​

  1. В веб-панели TypeWriter откройте страницу static и добавьте артефакт Staff Auth Passwords. Никогда не меняйте его artifactId впоследствии, иначе сохранённые пароли будут потеряны.
  2. На той же странице добавьте одну запись Staff Auth Config. Проверьте staffPermission, adminPermission, maxAttempts, minPasswordLength, bcryptCost и сообщения.
  3. Опубликуйте. StaffAuth нужны обе записи: без конфигурации он ничего не делает, а без артефакта персонал пропускается (в лог записывается ошибка).
  4. Зайдите с тестового аккаунта, у которого есть право персонала. Вы заморожены, и вас просят зарегистрироваться: введите пароль в диалоге, затем подтвердите его.
  5. Переподключитесь: теперь диалог запрашивает пароль.
  6. По желанию: добавьте действие 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
Команды1
Артефакты1

Устранение неполадок​

Персонал заходит, и у него не спрашивают пароль. Проверьте, что опубликованы и конфигурация, и артефакт. Без артефакта 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 — открывает диалог входа и меню с клавиатурой.