Autentizace#
Dvě nezávislé cesty ověření.
| Cesta | Kde | Čím |
|---|---|---|
| Session | web a administrace | přihlašovací formulář |
| JWT | API | token v hlavičce |
Session#
Přihlašuje se uživatelským jménem, ne e-mailem.
app/Core/Security/UserAuthenticator.php.
E-mail v přihlašovacím poli nefunguje
Systém hledá uživatele podle username. Je to nejčastější dotaz podpory —
zmiňte to v textu u formuláře.
JWT pro API#
Token se získá přihlašovacím endpointem a posílá se v hlavičce:
| Věc | Poznámka |
|---|---|
| Platnost | omezená, obnovuje se refresh tokenem |
| Rotace | refresh token se při použití mění |
| Detekce znovupoužití | použití starého refresh tokenu zneplatní řetěz |
| Deny-list | odhlášený token přestane platit okamžitě |
Rotace s detekcí znovupoužití
Ukradený refresh token se pozná tím, že se použije dvakrát. Systém pak zneplatní celou větev — útočník i oprávněný uživatel se musí přihlásit znovu.
Klíč pro třetí strany#
Pro server-server integrace existuje klíč v hlavičce X-API-Key.
Klíč nepatří do adresy ani do klientského kódu
Adresa se loguje a zůstane v historii prohlížeče. Klíč patří do hlavičky požadavku ze serveru.
Přihlášení přes cizí službu#
app/UI/Front/System/Components/LoginExternalComponent/ a poskytovatelé
v administraci.
Tajemství poskytovatele se v administraci nezobrazuje
Pole je typu heslo, prázdné znamená „ponechat“. Nezobrazujte je ani do logu.
Co API vyžaduje#
Ověření běží jako první věc v každém Api presenteru, v tomhle pořadí:
| Krok | Otázka | Co dělá při nesplnění |
|---|---|---|
| CORS | smí ten prohlížeč? | předletový dotaz se odbaví hned |
| JWT | kdo jsi? | bez platného tokenu 401 |
| Oprávnění | co smíš? | bez privilegia prázdný výsledek |
Výjimky se značí přímo v kódu atributem #[PublicAction] — přihlášení, obnova
tokenu, aktivační e-mail, zapomenuté heslo a návratové adresy platebních bran.
Chybějící oprávnění není chyba — je to TICHÉ PRÁZDNO
Tohle je dnes ta past, na kterou se naráží nejčastěji. Endpoint bez záznamu v privilegiích nevrátí 403 ani nic nezaloguje do odpovědi; vrátí prázdný seznam. Když něco „nejde a nikde není chyba“, hledejte nejdřív privilegium, ne kód.
Veřejná akce potřebuje vlastní brzdu
Co je za #[PublicAction], nechrání token. Přihlášení, obnova tokenu i
zapomenuté heslo proto mají rate limit; nová veřejná akce ho musí dostat taky,
jinak ji lze volat neomezeně.
Audit#
Pokusy o přihlášení se zapisují do log/auth.log a do tabulky.
Auditní log se nepřepisuje
Ani při úklidu testovacích dat. Je to záznam o tom, co se skutečně stalo; jeho přepsání by z něj udělalo padělek.
Přepínače#
config/Shared/security.neon.
Vypnutá ochrana se nikde nepřipomíná
Vypnete-li kvůli ladění kontrolu, na produkci se to neprojeví hláškou. Vraťte ji hned, ne „potom“.