Skip to content
← Indietro

DexAuth

Identity Provider centrale della DexSuite — SSO, utenti, gruppi, audit

In costruzione
Node.js Express Knex bcrypt SSO OIDC LDAP Audit Ledger HTTPS TLS Responsive
DexAuth

DexAuth è l'autenticatore centrale della DexSuite. Sa **chi sei** (autenticazione); le altre 4 app sanno **cosa puoi fare** (autorizzazione). La separazione netta delle responsabilità rende le altre app più snelle: DexHub, DexEditor, DexAssistant e Net Inventory Suite non ospitano più tabelle utenti — fanno solo verify HTTP a DexAuth e popolano `req.user` con utente + permessi.

Il flusso SSO è cookie-based: al login DexAuth setta `dexauth_sid` httpOnly + signed (HMAC con `SESSION_SECRET`) + `SameSite=Lax`. Hostname-only, così il browser lo manda automaticamente a tutte le porte dello stesso host. Quando un utente apre una qualsiasi delle 4 app, il middleware SSO fa `GET /api/whoami` su DexAuth, ottiene user/permessi, fa JIT provisioning e l'utente è dentro. Single Sign-Out: clic su "Esci" da una qualsiasi app → DexAuth distrugge la sessione globale → al prossimo refresh tutte le altre app riconoscono il logout e chiudono le sessioni locali.

Provider di autenticazione pluggable: `local` (funzionante, bcrypt + DB), `ldap` (skeleton, attivabile compilando `LDAP_URL` + `LDAP_BIND_DN` e installando `ldapjs`), `oidc` (skeleton, per Azure AD / Google / Keycloak / Authentik via `openid-client`). Il factory carica i provider configurati e ordinati per priorità.

Gestione utenti completa via UI standalone: utenti (con `must_change_password` al primo login), gruppi (membri + permessi ereditati), permessi DexAuth-livello-superiore (`user.read`, `user.write`, `user.password_reset`, `audit.read`, `provider.write`) separati da quelli applicativi delle 4 app. Reset password genera password temporanea + forza cambio. Sessioni attive monitorabili e killabili dall'admin (con clear cookie server-side se l'admin termina la propria sessione).

Audit ledger su tabella `audit_events` + mirror su file `data/logs/dexauth-audit.log` (linea JSON, parser-friendly per audit log centralizzato). Action keys stabili e namespacate: `auth.login.success`, `auth.login.failed`, `auth.password.changed`, `user.created`, `group.permissions_set`, `session.killed`, ecc.

UI bilingue IT (default) + EN, switch persistente in `localStorage`, chatbot embedded come nelle altre app (proxy verso Dex Assistant + tool dedicati `dexauth__get_user_status`).

Funzionalità

  • Single Sign-On cookie-based per le 4 app DexSuite (NIS, DexHub, DexEditor, DexAssistant)
  • Single Sign-Out: logout da una qualsiasi app chiude la sessione globale
  • Provider auth pluggable: local (bcrypt) ✅, LDAP/AD 🟡 skeleton, OIDC 🟡 skeleton
  • Cookie httpOnly + signed (HMAC con SESSION_SECRET) + SameSite=Lax
  • Client SSO pronti: middleware Express per Node, decorator Flask per Python
  • Whoami con cache TTL 30s lato client, invalidazione automatica su 401
  • JIT provisioning: la prima volta che un utente DexAuth appare in un'app, riga locale auto-creata
  • CRUD utenti con must_change_password al primo login + reset password admin
  • CRUD gruppi con membri e permessi ereditati
  • Permessi DexAuth-level: user.read/write, user.password_reset, audit.read, provider.write
  • Sessioni attive monitorabili dall'admin con bottone "Killa" + clear cookie server-side
  • Audit ledger: tabella audit_events + mirror file JSON line per log centralizzato
  • Action keys namespacate stabili (auth.login.success, user.created, ecc.)
  • Multilingua IT (default) + EN, switch persistente in localStorage
  • Chatbot embedded (FAB) con tool dedicati (dexauth__get_user_status)
  • HTTPS con certificato (TLS) per accesso sicuro a UI e API
  • UI responsive: mobile / tablet / desktop

Parametrizzazioni

  • DEXAUTH_PORT (default 9000)
  • DEXAUTH_HOST (default 0.0.0.0 — bind LAN richiesto per il pattern SSO della suite)
  • SESSION_SECRET — stringa per firmare i cookie. Da cambiare in produzione.
  • SESSION_TTL_MINUTES (default 720, ovvero 12h)
  • SESSION_COOKIE_DOMAIN (vuoto per cookie hostname-only — consigliato)
  • DB_ENGINE: sqlite | postgres | mariadb
  • DEXAUTH_DB_PATH (default data/dexauth.db)
  • INITIAL_ADMIN_PASSWORD — bootstrap admin (se vuota → admin/admin con must_change=true)
  • DEXAUTH_DEFAULT_LOCALE (it | en, default it)
  • DEXAUTH_AUDIT_PATH (default data/logs/dexauth-audit.log)
  • DEXASSISTANT_URL — per il chat widget embedded
  • LDAP_URL / LDAP_BIND_DN — per attivare provider LDAP
  • OIDC_ISSUER / OIDC_CLIENT_ID — per attivare provider OIDC
  • HTTPS_PFX / HTTPS_PFX_PASSWORD per abilitare TLS

Pre-requisiti tecnici

  • Node.js 18+
  • DB SQL: SQLite (incluso) oppure PostgreSQL 14+ / MariaDB 10.6+
  • Stesso schema HTTP/HTTPS delle 4 app downstream (Chrome Schemeful Same-Site non manda il cookie cross-scheme)
  • Tutte le 5 app sullo stesso hostname (porte diverse OK)
  • Per LDAP/AD: dipendenza npm ldapjs + env LDAP_URL/LDAP_BIND_DN
  • Per OIDC: dipendenza npm openid-client + env OIDC_ISSUER/OIDC_CLIENT_ID
  • Dex Assistant raggiungibile (opzionale, per chatbot embedded)