Discord
Wiki - Pluginy

AuthMe Reloaded - logowanie i rejestracja na serwerze

AuthMe Reloaded to standardowy plugin autoryzacyjny na serwerach Minecraft działających w trybie offline-mode. Wymusza rejestrację i logowanie, chroni konta przed przejęciem, obsługuje MySQL, bcrypt, captcha oraz odzyskiwanie hasła przez email.

Czas czytania: ~7 min Platforma: Paper / Spigot / Purpur

Co to jest AuthMe Reloaded

AuthMe Reloaded to plugin autoryzacyjny dla serwerów Minecraft działających w trybie offline-mode (tzw. non-premium). Kiedy serwer ma ustawione online-mode=false w pliku server.properties, Mojang nie weryfikuje tożsamości gracza — każdy może dołączyć podając dowolny nick, w tym nick kogoś innego. AuthMe rozwiązuje ten problem, wymuszając rejestrację hasłem przy pierwszym logowaniu i weryfikację przy każdym kolejnym.

Bez AuthMe na serwerze offline-mode każdy może podać nick admina i uzyskać dostęp do jego uprawnień. To krytyczna luka bezpieczeństwa. AuthMe blokuje gracza natychmiast po dołączeniu: nie może się poruszać, pisać na czacie, otwierać ekwipunku ani wchodzić w interakcje ze światem, dopóki się nie zaloguje. Po pomyślnym /login lub /register sesja jest aktywna — jeśli gracz wróci z tego samego adresu IP w ciągu ustawionego czasu, może zostać zalogowany automatycznie bez wpisywania hasła.

Plugin jest rozwijany od 2013 roku, a jego obecna wersja — Reloaded — to gruntownie przepisana edycja z aktywnym wsparciem. Dostępny za darmo na SpigotMC oraz GitHub. Obsługuje Spigot, Paper i Purpur w wersjach od 1.7.10 do 1.21.x.

Jeśli prowadzisz serwer premium (online-mode=true), AuthMe jest zbędny — Mojang weryfikuje tożsamość graczy samodzielnie i nie należy go instalować, bo może powodować konflikty.

Instalacja

Instalacja jest standardowa dla pluginów Bukkit/Spigot:

  1. Pobierz najnowszy plik .jar ze strony SpigotMC lub z GitHub Releases.
  2. Wgraj plik do katalogu plugins/ na serwerze.
  3. Uruchom lub zrestartuj serwer.
  4. AuthMe wygeneruje katalog plugins/AuthMe/ z plikiem config.yml.
  5. Skonfiguruj config.yml według potrzeb (patrz niżej), a następnie przeładuj plugin komendą /authme reload lub zrestartuj serwer.

AuthMe nie wymaga żadnych zależności. Opcjonalnie korzysta z EssentialsX do integracji (np. blokowania wiadomości prywatnych przed zalogowaniem) oraz z LuckPerms do zarządzania uprawnieniami do komend admina.

Po instalacji i starcie serwera sprawdź logi, czy nie ma błędów. Typowe problemy przy pierwszym uruchomieniu to brakujący sterownik JDBC dla MySQL (gdy wybierzesz bazę MySQL zamiast domyślnego SQLite) lub błąd uprawnień do zapisu w katalogu plugins/.

Konfiguracja config.yml

Plik plugins/AuthMe/config.yml jest rozbudowany, ale kluczowe sekcje, które należy dostosować przy nowej instalacji, to:

# Ustawienia rejestracji
settings:
  registration:
    enabled: true
    # Czas (w sekundach) na rejestrację po dołączeniu - po nim gracz jest wykopany
    timeout: 30
    # Czy wymagać potwierdzenia hasła przy /register haslo haslo
    enablePasswordConfirmation: true

  # Sesje IP - jak długo gracz pozostaje zalogowany z tego samego IP
  sessions:
    enabled: true
    # Czas sesji w minutach (0 = wyłączone)
    timeout: 0

  restrictions:
    # Zablokuj te akcje przed zalogowaniem
    allowMovement: false
    allowChat: false
    allowCommands: []
    # Lista komend dozwolonych przed zalogowaniem (np. /register, /login)

  # Maksymalna liczba kont z jednego IP
  maxLoginPerIp: 1
  maxRegisterPerIp: 1

# Komunikaty wyświetlane graczowi
messages:
  # Język wiadomości (pl dostępny w plugins/AuthMe/messages/)
  language: pl

Sekcja settings.restrictions jest kluczowa — definiuje co gracz może robić zanim się zaloguje. Domyślnie AuthMe blokuje ruch, czat i wszystkie komendy poza /login i /register. Możesz rozszerzyć listę dozwolonych komend o np. /help czy /register (jest domyślnie dodana automatycznie).

# Hashowanie haseł
security:
  passwordHash: BCRYPT
  bcrypt:
    log2Rounds: 10  # wyższy = wolniejszy, ale bezpieczniejszy. Zalecane: 10-12

# Baza danych
DataSource:
  backend: MYSQL  # lub SQLITE
  mySQLHost: localhost
  mySQLPort: 3306
  mySQLDatabase: authme
  mySQLUsername: authme_user
  mySQLPassword: twoje_haslo_do_bazy

Po każdej zmianie konfiguracji użyj /authme reload zamiast restartować cały serwer — plugin przeładuje ustawienia bez przerwy w działaniu.

Komendy gracza i admina

AuthMe dostarcza dwie grupy komend: dla graczy (dostępne bez uprawnień) i dla adminów (wymagające węzła uprawnień).

Komendy gracza

Komenda Opis
/register <haslo> <haslo> Rejestracja konta — wymagana przy pierwszym dołączeniu
/login <haslo> Logowanie przy każdym kolejnym dołączeniu
/changepassword <stare> <nowe> Zmiana własnego hasła (wymaga podania starego)
/logout Wylogowanie bez rozłączania — przy kolejnym ruchu poprosi o hasło
/email add <email> <email> Dodanie adresu email do konta (potrzebne do odzyskiwania hasła)
/email change <stary> <nowy> Zmiana adresu email przypisanego do konta
/email recovery <email> Wysłanie nowego hasła na podany adres email
/unregister <haslo> Usunięcie własnego konta z bazy (gracz musi znać swoje hasło)

Komendy administracyjne

Komenda Opis Uprawnienie
/authme register <nick> <haslo> Rejestracja konta dla innego gracza authme.admin.register
/authme unregister <nick> Usunięcie konta gracza z bazy authme.admin.unregister
/authme changepassword <nick> <nowe> Zmiana hasła innemu graczowi (bez znajomości starego) authme.admin.changepassword
/authme forcelogin <nick> Wymuszenie zalogowania gracza bez podawania hasła authme.admin.forcelogin
/authme accounts <nick> Lista wszystkich nicków zarejestrowanych z danego IP authme.admin.accounts
/authme reload Przeładowanie konfiguracji bez restartu serwera authme.admin.reload
/authme purge <dni> Usunięcie kont nieaktywnych przez podaną liczbę dni authme.admin.purge
/authme getemail <nick> Sprawdzenie emaila przypisanego do konta gracza authme.admin.getemail

Uprawnienia do komend administracyjnych przydzielaj przez LuckPerms. Nigdy nie dawaj graczom authme.admin.* — daje dostęp do wszystkich komend adminów, w tym zmiany cudzych haseł.

Baza danych - SQLite vs MySQL

AuthMe obsługuje dwa backendy bazodanowe: SQLite (domyślny) i MySQL. Wybór zależy od skali serwera i planów na integrację z zewnętrznymi aplikacjami.

SQLite

SQLite to plik lokalny plugins/AuthMe/authme.db. Nie wymaga konfiguracji ani zewnętrznego serwera bazy danych. Sprawdza się na małych serwerach do kilkudziesięciu graczy. Wadą jest brak obsługi równoległych zapytań — przy intensywnym ruchu może powodować blokady zapisu. Nie nadaje się do integracji z forum ani stroną internetową, bo inne aplikacje nie mogą łatwo odczytać danych z pliku SQLite działającego serwera.

MySQL

MySQL (lub MariaDB) to zewnętrzny serwer bazy danych. Wymagana konfiguracja w config.yml:

DataSource:
  backend: MYSQL
  mySQLHost: localhost        # adres serwera MySQL
  mySQLPort: 3306
  mySQLDatabase: authme      # nazwa bazy danych (musi istnieć)
  mySQLUsername: authme_user
  mySQLPassword: silne_haslo_bazy
  mySQLTablename: authme     # nazwa tabeli
  mySQLColumnName: username
  mySQLColumnPassword: password
  mySQLColumnIp: ip
  mySQLColumnLastlogin: lastlogin
  mySQLColumnSalt: salt
  mySQLColumnGroup: groupname
  mySQLColumnEmail: email

MySQL jest wymaganym wyborem gdy:

  • Serwer ma więcej niż 50 graczy online jednocześnie
  • Planujesz integrację z forum (phpBB, XenForo, MyBB)
  • Chcesz udostępnić panel statystyk lub rejestracji przez stronę www
  • Uruchamiasz kilka serwerów w sieci BungeeCord i chcesz współdzielić konta

Przy sieci BungeeCord wszystkie serwery mogą korzystać z tej samej bazy MySQL — gracz rejestruje się raz i ma dostęp do całej sieci. AuthMe obsługuje tryb bungeecord: true w konfiguracji, który wysyła informację o zalogowaniu przez BungeeCord do wszystkich połączonych serwerów.

Hashowanie haseł

AuthMe nie przechowuje haseł w postaci jawnej — zapisuje ich skrót kryptograficzny (hash). Gdy gracz loguje się hasłem, plugin hashuje podany ciąg i porównuje wynik z zapisanym hashem. Nawet jeśli ktoś uzyska dostęp do bazy danych, nie pozna oryginalnych haseł.

Dostępne algorytmy hashowania w AuthMe:

Algorytm Bezpieczeństwo Szybkość Rekomendacja
BCRYPT Bardzo wysokie Wolny (celowo) Zalecany — domyślny wybór
ARGON2 Najwyższe Bardzo wolny Najlepszy — wymaga Java 9+
SHA256 Średnie Szybki Nie zalecany dla nowych serwerów
MD5 Niskie Bardzo szybki Odradzany — przestarzały
PLAINTEXT Brak Natychmiastowy Nigdy nie używaj

Wybór algorytmu konfiguruje się w sekcji security.passwordHash. Dla bcrypt dodatkowo ustaw parametr log2Rounds — jego wartość określa koszt obliczeniowy (im wyższy, tym wolniej atakujący może sprawdzać hasła w przypadku wycieku bazy). Zalecana wartość to 10-12.

security:
  passwordHash: BCRYPT
  bcrypt:
    log2Rounds: 10

Jeśli migrujesz serwer z innym algorytmem (np. SHA256) i chcesz przejść na bcrypt, AuthMe obsługuje migrację przez komendę /authme converter. Konwertuje istniejące hashe do nowego formatu przy kolejnym logowaniu każdego gracza — transparentnie, bez konieczności zmiany hasła przez graczy.

Zabezpieczenia - captcha, anti-bot i limity IP

AuthMe zawiera kilka mechanizmów ochrony przed automatycznymi atakami:

Captcha

Po określonej liczbie błędnych prób logowania AuthMe może wymagać rozwiązania prostej captchy tekstowej przed kolejną próbą. Konfiguracja:

security:
  captcha:
    useCaptcha: true
    # Liczba błędnych logowań przed wyświetleniem captchy
    maxLoginTry: 5
    captchaLength: 5

Captcha wyświetla się graczowi jako losowy ciąg znaków w chacie (np. "Wpisz: Xk3mP"), który musi przepisać komendą /captcha Xk3mP. To prosta, ale skuteczna bariera dla botów.

Limity IP

Kluczowe ustawienia ograniczające nadużycia z jednego adresu IP:

settings:
  restrictions:
    # Maksymalna liczba zarejestrowanych kont z jednego IP
    maxRegisterPerIp: 1
    # Maksymalna liczba jednoczesnych połączeń z jednego IP
    maxLoginPerIp: 1
    # Blokada IP po przekroczeniu limitu prób (minuty)
    tempbanLength: 30
    maxTries: 10

Na serwerach, gdzie gracze mogą korzystać z NAT (np. szkolnego), warto zwiększyć maxRegisterPerIp do 2-3, bo kilka osób może dzielić jeden publiczny adres IP.

Timeout i auto-kick

Gracz, który dołączy i nie zaloguje się w ustalonym czasie, zostaje wyrzucony z serwera:

settings:
  registration:
    # Czas na rejestrację/logowanie w sekundach, po którym gracz jest wykopany
    timeout: 30

Wartość 30 sekund to rozsądny kompromis — wystarczy czasu na wpisanie hasła, ale nie blokuje slotu serwera graczom AFK na ekranie logowania.

Ochrona przed przejęciem nicku

AuthMe domyślnie zablokuje gracza, który dołączy z nickiem już zarejestrowanym w bazie, i poprosi go o hasło. Jeśli gracz nie zna hasła — nie wejdzie. To podstawowa ochrona przed podszywaniem się pod innych graczy, dla której AuthMe został stworzony.

Odzyskiwanie hasła przez email

AuthMe obsługuje wysyłanie nowego hasła na adres email w przypadku, gdy gracz go zapomni. Funkcja wymaga skonfigurowania serwera SMTP.

Email:
  senderEmail: noreply@twojserwer.pl
  smtpHost: smtp.gmail.com
  smtpPort: 465
  emailAccount: noreply@twojserwer.pl
  emailPassword: haslo_konta_email
  emailSMTP: true
  useSMTP: true
  # Szablon maila z nowym hasłem
  mailSubject: "Odzyskiwanie hasła - TwójSerwer"

Przepływ odzyskiwania hasła wygląda następująco:

  1. Gracz dołącza na serwer i widzi komunikat logowania.
  2. Wpisuje /email recovery swoj@email.pl.
  3. AuthMe generuje losowe hasło tymczasowe i wysyła je na podany adres.
  4. Gracz loguje się tymczasowym hasłem przez /login haslo_tymczasowe.
  5. Gracz zmienia hasło na własne przez /changepassword stare nowe.

Aby funkcja działała, gracz musi wcześniej przypisać email do konta komendą /email add adres@email.pl adres@email.pl. Dobrą praktyką jest przypomnienie o tym w wiadomości powitalnej serwera lub w regulaminie.

Przy konfiguracji Gmail użyj hasła aplikacji (App Password) zamiast głównego hasła konta, jeśli masz włączone uwierzytelnianie dwuskładnikowe. Hasło aplikacji generujesz w ustawieniach bezpieczeństwa konta Google.

Integracja z forum i stroną internetową

Jedną z głównych zalet AuthMe jest możliwość synchronizacji kont graczy z zewnętrznymi systemami. Gracze mogą używać tego samego hasła w grze i na forum serwera.

Integracja z forum phpBB3

AuthMe obsługuje natywnie phpBB3 przez klasę hashowania PHPBB3. Po jej wybraniu w konfiguracji AuthMe zaczyna hashować hasła w tym samym formacie co phpBB — gracz rejestruje się na forum i może wejść do gry tym samym hasłem, albo odwrotnie.

security:
  passwordHash: PHPBB3

Wymagane jest, aby oba systemy korzystały z tej samej bazy MySQL — tabela użytkowników forum musi być dostępna dla AuthMe. Konfiguracja nazw kolumn w sekcji DataSource pozwala wskazać dokładnie te same kolumny co forum.

Obsługiwane systemy forum

  • phpBB3 — natywna obsługa, algorytm PHPBB3
  • MyBB — algorytm MYBB
  • SMF — algorytm SMF11 lub SMF2
  • XenForo — algorytm XENFORO
  • WordPress — algorytm WORDPRESS
  • Joomla — algorytm JOOMLA

Panel rejestracji przez stronę www

Jeśli korzystasz z MySQL, możesz zbudować prosty panel na stronie, który wstawia rekord do tabeli AuthMe. Wymagane kolumny to username, password (zahashowane bcrypt), ip, lastlogin, regdate i regip. Gracz rejestruje się na stronie i może od razu wejść na serwer bez komendy /register.

Integracja z BungeeCord

Na sieci serwerów z BungeeCord wszystkie serwery powinny korzystać z tej samej bazy MySQL i mieć włączony tryb BungeeCord w AuthMe:

Hooks:
  bungeecord: true

Po zalogowaniu na serwerze lobby, gracz może przejść na inne serwery sieci bez ponownego logowania — informacja o sesji jest przekazywana przez BungeeCord.

Porady dla adminów

  • Używaj MySQL zamiast SQLite - na serwerze z więcej niż 20 graczami SQLite może spowalniać logowanie. MySQL jest szybszy i bezpieczniejszy pod kątem spójności danych.
  • Wybierz bcrypt od razu - zmiana algorytmu hashowania po fakcie wymaga przeprowadzenia konwersji. Zacznij od bcrypt z log2Rounds=10 i nigdy nie będziesz musiał migrować.
  • Ustaw limity IP - maxRegisterPerIp=1 i maxLoginPerIp=1 to podstawa ochrony przed masową rejestracją botami.
  • Skonfiguruj email recovery - gracze zapominają hasła. Bez emaila jedyną opcją jest ręczna interwencja admina przez /authme changepassword. To marnowanie czasu, który możesz spędzić na rozwijaniu serwera.
  • Regularnie czyść nieaktywne konta - komenda /authme purge 365 usuwa konta nieaktywne od roku. Mniejsza baza = szybsze zapytania = płynniejsze logowanie.
  • Nie dawaj graczom authme.admin.* - to uprawnienie daje dostęp do /authme changepassword, co pozwala zmienić hasło dowolnemu graczowi. Przydzielaj tylko konkretne węzły uprawnień przez LuckPerms.
  • Przetestuj timeout - wartość 30 sekund to minimum. Na serwerach z grafiką ładującą się długo (np. modpacki) zwiększ do 60-90 sekund, żeby gracz zdążył się zalogować zanim zostanie wyrzucony.
  • Monitoruj logi AuthMe - plugin loguje nieudane próby logowania do plugins/AuthMe/logs/. Nagły wzrost prób z jednego IP to sygnał ataku brute-force — zablokuj IP na firewallu.

Powiązane artykuły: EssentialsX (komendy podstawowe), LuckPerms (uprawnienia), katalog wszystkich pluginów.