Sari la conținut

Securitate & autentificare

Acest conținut nu este încă disponibil în limba selectată.

gNotify are două planuri de autentificare disjuncte, cu lanțuri de securitate Spring separate.

/api/v1/** autentifică sisteme externe prin TLS mutual cu certificate PFX. security/pfx/PfxAuthenticationFilter oglindește middleware-ul PHP PfxAuthenticate:

  • nginx termină TLS și pune headerele X-SSL-Client-* (amprenta certificatului client);
  • filtrul normalizează amprenta (minuscule, fără :/spații) și o compară cu Sistem.certFingerprint (hash_equals);
  • Sistem.activ=false → 403 System is not active;
  • în dev, mTLS e ocolit (gnotify.pfx.auth-disabled=true), cu sistemul billing-service.

Plan administrare — JWT + Keycloak OIDC (@Order(1))

Section titled “Plan administrare — JWT + Keycloak OIDC (@Order(1))”

UI-ul de administrare + /api/** folosesc JWT (HS512) cu Keycloak OIDC dual-auth opțional:

flowchart LR
U[Operator/cetățean] --> JWT[POST /api/authenticate<br/>JWT HS512]
U --> OIDC[Keycloak realm gnotify<br/>sso.gstack.esempla.systems]
JWT --> API[/api/**, UI]
OIDC --> API
  • gated de gnotify.oidc.enabled; realm gnotify, client gnotify-web.
  • portalul cetățean folosește același plan JWT (self-service /api/registry/me/**).
ZonăCerință
/api/v1/**mTLS PFX (sistem activ)
/api/admin/**ROLE_ADMIN
/api/providers/**ROLE_ADMIN
/api/operator/**operator autentificat (scopat pe systemId)
/api/registry/me/**cetățean autentificat (self-service)
/api/**autentificat

Scopare pe operator (OperatorScopeService, injectat în query-services): un operator legat de un Sistem (Sistem.operatorLogin) vede/gestionează doar resursele sistemului său (șabloane, grupuri, notificări). Logica e scrisă de mână și trebuie re-injectată după regenerare.

/api/v1/** întoarce erori în stil Laravel {"message": …} (via V1ExceptionAdvice, scopat pe pachetul v1). API-ul de administrare păstrează JHipster problem+json.

EvenimentNotificare este strict append-only: repository-ul interzice UPDATE/DELETE (AppendOnlyAuditGuard, listener Hibernate care veto-ează), plus trigger DB. Echivalentul log-ului JSON de audit din PHP; fiecare tranziție de status scrie un eveniment.

  • Sisteme externe: certificate client PFX, amprenta stocată în Sistem.certFingerprint.
  • MNotify: certs/2026_e-integritate.pfx (eIntegritate/ANI) — gitignored, copt în jar (vezi MNotify-Forwarding).
  • Certificatele mTLS guvernamentale (*.pfx) sunt în .gitignore, niciodată comise.