Přeskočit obsah
V
Pro vývojáře
Architektura, konvence, jádro systému a bezpečnost
Bezpečnost / Autentizace a autorizace

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:

Authorization: Bearer <token>
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“.