[DEMO] Auto-auth SPA demo: demo_jwt nel fragment spa_iframe_url + bootstrap token sincrono in common-bi.js

Chiude il gap auth: la SPA demo si auto-autentica col demo_jwt (token API nis2_access_token + org dal
payload) PRIMA di checkAuth, cross-origin (niente sessionStorage same-origin). spa_iframe_url ora atterra
su /dashboard.html?demo=..#djwt=... DemoController.DEMO_BASE override via env DEMO_BASE_URL (switch a
sottodominio senza codice). USR2 richiesto per DemoController.
This commit is contained in:
DevEnv nis2-agile
2026-06-13 10:00:28 +02:00
parent 4222e827f9
commit 460d435a47
2 changed files with 30 additions and 3 deletions
+15 -3
View File
@@ -66,9 +66,12 @@ class DemoController extends BaseController
'demo_jwt' => $demoJwt,
'company_id' => $orgId, // alias di compatibilità standard
'organization_id' => $orgId,
'spa_iframe_url' => self::DEMO_BASE . '/?demo=' . $sessionId,
'manifest_url' => self::DEMO_BASE . '/api/demo/manifest?session_id=' . $sessionId,
'credentials_url' => self::DEMO_BASE . '/api/demo/credentials?session_id=' . $sessionId,
// spa_iframe_url atterra su dashboard e porta il demo_jwt nel FRAGMENT (#djwt):
// common-bi.js lo imposta come token API in modo SINCRONO (prima di checkAuth),
// così la SPA si auto-autentica anche cross-origin (niente sessionStorage same-origin).
'spa_iframe_url' => $this->demoBase() . '/dashboard.html?demo=' . $sessionId . '#djwt=' . $demoJwt,
'manifest_url' => $this->demoBase() . '/api/demo/manifest?session_id=' . $sessionId,
'credentials_url' => $this->demoBase() . '/api/demo/credentials?session_id=' . $sessionId,
'expires_at' => gmdate('Y-m-d\TH:i:s\Z', $expiresTs),
'hmac_key_seed' => $hmacKeySeed,
'presentation_mode' => 'realtime',
@@ -200,6 +203,15 @@ class DemoController extends BaseController
// ═══ Helpers ═════════════════════════════════════════════════════════════
/** Base URL della SPA demo (override via env DEMO_BASE_URL per switch a sottodominio). */
private function demoBase(): string
{
return getenv('DEMO_BASE_URL')
?: ($_SERVER['DEMO_BASE_URL'] ?? '')
?: ($_ENV['DEMO_BASE_URL'] ?? '')
?: self::DEMO_BASE;
}
/** Risolve la sessione da Bearer demo_jwt (preferito) o ?session_id=. */
private function resolveSession(): ?array
{