Auth Passkey Autorita
Tato stránka popisuje centrální auth server, na který je administrace Petrovo CMS napojená. Jde o samostatnou autoritu pro bezheslové přihlášení přes WebAuthn Passkey.
Role autority
Auth server řeší to, co CMS řešit nemá:
- registraci uživatele pouze přes pozvánku
- WebAuthn challenge pro registraci i přihlášení
- vydání a obnovu
JWTtokenu - lokalizované UI a emaily
- centrální identitu použitelou napříč více administracemi nebo weby
CMS si z auth serveru nebere heslo ani session. Dostává jen výslednou ověřenou identitu ve formě tokenu.
Základní principy
- žádná hesla
- žádný OTP
- žádný magic link
- identita je postavená na emailu + Passkey
- registrace je možná jen na pozvánku
JWTje self-contained a podepsanéRS256
Jazyky
- podporované jazyky:
cs,en - jazyk lze poslat přes parametr
locale - pokud
localechybí nebo je neplatné, server používáAccept-Language - fallback je
cs
Lokalizované jsou login obrazovky, registrační obrazovky, texty v JavaScriptu i invite emaily.
Registrace přes pozvánku
CMS / jiný klient
→ POST /api/invite
X-Api-Key: INVITE_SECRET
{ email, redirect?, locale? }
← { ok: true }
Auth server
→ odešle email s jednorázovým odkazem
Uživatel
→ otevře /auth/invite?token=...&redirect=...&locale=...
→ spustí registraci Passkey
→ dokončí WebAuthn challenge
← registrace hotová
Přihlášení
Uživatel
→ otevře login auth serveru
→ zadá email
→ auth server vrátí challenge
→ prohlížeč / systém / správce hesel podepíše challenge Passkey
← auth server vrátí ověřenou identitu a JWT
Sliding session
Auth server vydává token typicky na 30 minut. Aktivní session se dá tiše prodlužovat přes:
POST /api/auth/refresh
Authorization: Bearer <jwt>
Klient tak nemusí posílat uživatele znovu na Passkey při každém krátkém timeoutu.
Endpointy důležité pro CMS
| Metoda | Endpoint | Účel |
|---|---|---|
GET |
/?redirect=...&locale=... |
start loginu |
POST |
/api/invite |
vytvoření pozvánky |
POST |
/api/auth/refresh |
obnova tokenu |
GET |
/api/auth/status |
ověření tokenu |
POST |
/api/passkey/invite/start |
start registrace přes invite |
POST |
/api/passkey/invite/finish |
dokončení registrace přes invite |
Bezpečnostní model
- challenge je jednorázová
- challenge expiruje
- podpis authenticatoru se ověřuje proti uloženému veřejnému klíči
- pozvánky jsou jednorázové a časově omezené
- rate limit je na úrovni endpointů a IP
- tokeny mají pevnou expiraci a obnovují se explicitně
Vazba na Petrovo CMS
Petrovo CMS používá auth autoritu jen jako poskytovatele identity. Jakmile auth server vrátí JWT, CMS:
- token lokálně ověří
- z tokenu vezme email
- email spáruje s tabulkou
admin - založí vlastní PHP session
Na to navazuje stránka Admin Auth v CMS.