87 lines
6.0 KiB
Markdown
87 lines
6.0 KiB
Markdown
# Accettazione di shell e autenticazione
|
|
|
|
Questa matrice è un gate di rilascio, non una dichiarazione che le prove server
|
|
siano già state eseguite. Registrare ambiente, data, SHA ThothII/portale, immagini,
|
|
modalità effettive e risultato di ogni caso. Usare account di prova autorizzati;
|
|
non incollare token, cookie, password o dati clinici nelle evidenze.
|
|
|
|
## Configurazione prima della prova
|
|
|
|
- Full/local: descrittore `shell.mode: full`, default en, `auth.yaml` local;
|
|
`AUTH_MODE` non impostato. Scegliere browser/origin coerenti con `publicUrl`.
|
|
- Full/OIDC: full, configurazione OIDC valida e callback esatta
|
|
`PUBLIC_URL/api/auth/oidc/callback`; `AUTH_MODE` non impostato.
|
|
- Embedded/Omics: embedded/omics-portal, core upstream senza auth.yaml/runtime
|
|
projection, sessione portale e capability; API attraverso il solo proxy fidato.
|
|
- Config pubblico caricato prima del modulo React, no-store e senza segreti;
|
|
connessioni private del core non raggiungibili da client non fidati.
|
|
|
|
## Full, senza documento Omics
|
|
|
|
| Prova | Risultato atteso |
|
|
| --- | --- |
|
|
| Primo accesso con preferenze browser assenti | Header ThothII; inglese e light; nessun errore per elementi Omics mancanti |
|
|
| Login locale valido/errato | Identità verificata nel primo caso; errore generico e nessun contenuto protetto nel secondo |
|
|
| Remember me | Sessione persistente secondo TTL local; senza Remember me cookie non persistente |
|
|
| OIDC con provider raggiungibile | Redirect, callback validata, nome e permessi dall'identità verificata |
|
|
| OIDC con claim gruppi invalido | Login rifiutato; nessuna informazione sensibile nel browser |
|
|
| OIDC con gruppi validi ma non mappati | Nessun ruolo, accesso alle route protette negato |
|
|
| Nome → Log out | Sessione ThothII revocata; una nuova richiesta protetta con quella sessione non accede |
|
|
| Nuovo login OIDC dopo logout | Può riusare SSO provider; nessuna promessa di logout globale |
|
|
| Disabilitazione/ruolo/password/logout-all locale | La sessione precedente viene invalidata al controllo server |
|
|
| Cambio lingua e tema | Etichette aggiornate, preferenze ricordate, leggibilità anche di popup e griglie |
|
|
| Fullscreen, Esc, rifiuto del browser | Stato/icona coerenti; errore visibile su rifiuto, nessun falso fullscreen |
|
|
| Schermo stretto/largo | Margini simmetrici almeno 20px; header adattivo; nessuna rotellina amministrativa |
|
|
|
|
## Embedded, dal portale reale
|
|
|
|
| Prova | Risultato atteso |
|
|
| --- | --- |
|
|
| Utente già autenticato e autorizzato → Datamart Builder | Nessun secondo login e un solo header, quello Omics |
|
|
| Utente senza capability o sessione scaduta | Pagina/API protette rifiutate, non UI autenticata ottenuta da eventi DOM |
|
|
| `/datamart-builder/api/me` autorizzato | Issuer `portal`, subject stabile, ruoli attesi; session/CSRF ThothII null |
|
|
| Utente normale vs amministratore | Azioni amministrative protette server-side; flag admin non controllabile dal client |
|
|
| Header identità inventati dal client, anche admin | Non concedono accesso né elevazione; il proxy usa soltanto la verifica Django |
|
|
| Richiesta cross-origin a un'operazione di prova | Rifiutata senza modificare dati; testare con risorse fittizie in ambiente isolato |
|
|
| IT/EN selezionato prima dell'apertura | Locale iniziale uguale a quello Django confermato |
|
|
| Cambio lingua dal form Omics | Reload normale con CSRF/next; selezione sessione conservata, nessuna generazione automatica |
|
|
| Cambio tema con menu/form aperti | UI, popup e griglia seguono Omics, senza controlli locali duplicati |
|
|
| Fullscreen dall'header e uscita con Esc | Stato reale sincronizzato anche dentro ThothII |
|
|
| Logout Omics e ritorno in una seconda scheda | Al ricontrollo `/me` lo stato protetto viene rimosso; rientro tramite Omics |
|
|
| Riconnessione SSE dopo scadenza | Verifica accesso prima di riprendere; nessun aggiramento del proxy |
|
|
| 403 su una sola operazione con `/me` ancora valido | Errore operativo, non logout indiscriminato |
|
|
| Contesto host mancante/tema invalido | Errore d'integrazione; niente fallback full o login autonomo |
|
|
| API, config e asset dopo rebuild | Prefissi corretti, config no-store, manifest aggiornato dopo la sua cache di 30 s |
|
|
|
|
Le prove con header inventati devono attraversare l'ingresso pubblico protetto,
|
|
non certificare la sicurezza inviando header direttamente al core che per
|
|
contratto si fida del proxy. L'isolamento di rete del core va verificato a parte.
|
|
Non promettere che il logout chiuda immediatamente tutti gli SSE già aperti: il
|
|
proxy autorizza all'apertura e i ricontrolli avvengono sulle nuove richieste.
|
|
|
|
## Continuità del workflow, entrambe le modalità
|
|
|
|
| Prova | Risultato atteso |
|
|
| --- | --- |
|
|
| Nuova sessione con UI italiana/inglese | `interaction_language` acquisita alla creazione; domande e scelte nella lingua salvata |
|
|
| Cambio UI dopo creazione e ripresa | La lingua della sessione resta invariata |
|
|
| Vecchio manifest senza lingua | Prima ripresa fissa la lingua workspace secondo il criterio di compatibilità |
|
|
| Bozza/modifica amministrativa e navigazione | Conferma prima della perdita; annullamento conserva la modifica |
|
|
| Reload con selezione esistente | Riapre documenti senza avviare Pi/generazione automaticamente |
|
|
| Cambio utente | Nessuno stato protetto della precedente identità riutilizzato |
|
|
| SQL, identificatori, Evidence e Memory | Contenuti originali non tradotti/riscritti dal cambio UI |
|
|
|
|
## Copertura automatica e limiti
|
|
|
|
Frontend: `AuthGate.test.tsx`, `authState.test.ts`, `OmicsPortalAdapter.test.ts`,
|
|
`AppShell.host.test.tsx`, test di stream/sessioni e
|
|
`e2e/ui-visual-review.spec.ts`. Backend: test di auth, principal, route e
|
|
isolamento della configurazione. CLI: normalizzazione shell e proiezioni.
|
|
I test Omics isolati sono descritti nel suo `docs/thothii-integration.md`.
|
|
|
|
I test automatici con API/IdP simulati non sostituiscono callback reali,
|
|
sessioni Omics, permessi di rete, TLS, cookie reali e interazioni fra schede sul
|
|
server. Prima di chiudere il rilascio indicare esplicitamente prove superate,
|
|
non eseguite e motivi del rinvio. Procedure e rollback:
|
|
[shell e deploy](../operations/shell-and-localization.md).
|