Skip to content

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 JWT tokenu
  • 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
  • JWT je self-contained a podepsané RS256

Jazyky

  • podporované jazyky: cs, en
  • jazyk lze poslat přes parametr locale
  • pokud locale chybí 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.