Přeskočit obsah

Přihlášení zaměstnanců

Funkce: login, passkey, invitations, refresh, logout

Prověřeno proti commitu: rozpracováno

Testy: backend/tests/Feature/Audit/PrihlaseniZamestnancuAuditTest.php

Routy

Routa Perimetr Ochrana Controller
POST /api/login veřejný staff login jen při STAFF_PASSWORD_LOGIN_ENABLED=true AuthController::login
POST /api/login/request veřejný legacy magic-link start jen při STAFF_MAGIC_LINK_ENABLED=true AuthController::request
POST /api/loginTokens/{token} veřejný legacy magic-link callback jen při STAFF_MAGIC_LINK_ENABLED=true AuthController::verify
GET /api/auth/passkey/login veřejný passkey start redirect na centrální auth AuthController::passkeyLogin
GET/POST /api/auth/passkey/callback veřejný passkey callback JWT z centrálního auth serveru AuthController::passkeyCallback
POST /api/auth/refresh veřejný session refresh refresh cookie AuthController::refresh
POST /api/auth/logout veřejný logout access nebo refresh cookie AuthController::logout
GET /api/invitations/{token} veřejný náhled pozvánky invitation token AuthController::getInvitation
POST /api/invitations/{token}/complete veřejné dokončení pozvánky invitation token AuthController::completeInvitation
GET /api/auth/passkey/manage interní správa passkeys staff session AuthController::passkeyManage
POST /api/auth/passkey/invite interní passkey pozvánka admin role AuthController::sendPasskeyInvite

Opravené nálezy

AUTH-STAFF-05 — Invitation token lze po dokončení zkusit použít znovu (střední)

Stav: opraveno

Test: AUTH-STAFF-05: použitý invitation token nezaloží další účet

Ověřený fakt — AuthController::completeInvitation() kontroluje nepoužitost přes used_at, ale tabulka invitations má stav dokončení ve sloupci accepted_at. Stejná metoda po založení účtu zapisuje accepted_at = NOW().

Oprava — dokončení pozvánky kontroluje accepted_at, tedy stejný stavový sloupec, který se po úspěšném založení účtu nastavuje.

Dopad — použitý invitation token není odmítnutý na stavové kontrole. Opakované volání se stejným e-mailem narazí až na unikátní omezení users.email, tedy na chybový stav mimo řízenou aplikační odpověď. Pokud by se později změnila unikátnost uživatelů, stejná chyba by mohla založit další účet ze stejné pozvánky.

Ověřené bez nálezu

  • Legacy password login je ve výchozím testovacím nastavení vypnutý a nezakládá session.
  • Passkey callback nevytvoří session pro neaktivního uživatele.
  • Refresh odmítne session, jejíž uživatel byl po přihlášení deaktivován.
  • Logout zneplatní session i tehdy, když request obsahuje jen refresh cookie.
  • Passkey callback kontroluje audience JWT už v existující feature sadě.
  • Terapeut bez portal_access_enabled nedostane staff session přes passkey callback už v existující feature sadě.