pagopa / io-app

IO, l'app dei servizi pubblici
https://io.italia.it
European Union Public License 1.2
602 stars 104 forks source link

Verifica e notifica di scadenza login #2806

Closed mfortini closed 2 years ago

mfortini commented 3 years ago

Il login su IO scade se l'app non viene aperta per troppo tempo.

Di conseguenza non si hanno più neppure le notifiche relative a messaggi, scadenze, ...

To Reproduce

  1. Installare IO e fare login.
  2. Lasciare l'app chiusa per un tempo sufficiente a far scadere il login
  3. Riaprire l'app e ricevere l'informazione che il login è scaduto

Expected behavior Notifica per riaprire l'app in modo da rinnovare la scadenza o per indicare il login scaduto.

Versione dell'app

1.20.0.2

Smartphone (please complete the following information):

djechelon commented 3 years ago

@mfortini No, scade ogni 30 giorni. Fissi 😢

Leggevo che la funzionalità (obbligo di ri-login) per ragioni di sicurezza. La richiesta la vedo più che sensata, Io potrebbe avvisare che la login è scaduta. "Per continuare a ricevere avvisi dalle Pubbliche Amministrazioni, effettua nuovamente il login con SPID o CIE"

Related: #1782

Undermaken commented 3 years ago

Ha senso ;) Grazie https://www.pivotaltracker.com/story/show/176993783

alessiomatricardi commented 3 years ago

A proposito del login, una soluzione del genere: utenti in possesso di uno smartphone con riconoscimento biometrico attivo (TouchID/FaceID per iPhone, similari nel mondo Android) -> accede all'app, dopo il primo accesso, senza login con SPID o CIE, finché non fa logout volontario. utenti in possesso di smartphone senza riconoscimento biometrico o non attivo -> login ogni 30 giorni

potrebbe essere tecnicamente adottabile? Leggendo le recensioni, le maggiori critiche sono rivolte proprio alla fase di login, che a volte fallisce anche (ed in effetti il sistema di SPID è molto macchinoso, sopratutto se la password dell'utente è scaduta, ma questo è fuori dal vostro controllo)

djechelon commented 3 years ago

Non credo che l'autenticazione biometrica sia una discriminante sensata. Touch id & co sono solo dei facilitatori, qualcosa che non ti costringe a ricordare diversi pin. Infatti "dietro" l'impronta digitale o la scansione del volto c'è proprio il PIN di 6 cifre di IO.

IO non può verificare le impronte dell'utente, ma solo il pin. Il dispositivo rilascia il pin in chiaro se il sensore riconosce le impronte.

Paradossalmente, dal punto di vista della sicurezza il solo touch id è controproducente. Non è il "classico" threat model di IO, ma l'autenticazione con impronta funziona anche se l'utente è in stato di incoscienza (sonno, narcosi) mentre l'estorsione di pin o impronta causano la consapevolezza. Qui stiamo divagando un po' peró...

Credo semplicemente che qualcuno in PagoPA debba prendere una fatidica decisione compatibilmente con il CAD e soprattutto con le migliaia di app finanziarie che non richiedono ulteriore autenticazione. Decisione per tutti.

djechelon commented 3 years ago

Aggiungo ora che ho capito meglio il commento. La situazione è peggio di quanto discusso.

La proposta è di consentire la prosecuzione della sessione se ci si autentica con impronta.

La login si fa ogni 30 giorni per due motivi Sicurezza: se il cellulare viene usato da terzi (ci arrivo...) La sessione deve scadere Tecnico: il token SAML di spid non può essere revocato. La maggior parte delle app che usa token JWT consente di revocare alcuni token già emessi su uno specifico dispositivo. IO non ha una "gestione dispositivi".

Problema. Le impronte sono di qualcuno. del proprietario del dispositivo, si spera. IO non potrà mai sapere DI CHI sono le impronte.

Scenari. Figlio che accede allo IO del genitore e usa le proprie impronte sul proprio telefono, poi litiga e si tiene la login. Il genitore non ha mezzi tecnici per revocargliela Coniuge che accede, poi i due vanno in causa.

Ad oggi dopo 30 giorni il peggio è passato

alessiomatricardi commented 3 years ago

Si hai ragione, non ho valutato tutti i possibili scenari. Però a questo punto è necessario far 'ingoiare la pillola' a tutti quelli che si vedono buttati fuori e perdono la pazienza. Dal 31' giorno sarebbe opportuno mostrare all'utente una schermata del tipo "Ehi, la tua sessione è scaduta. Per ragioni di sicurezza, è necessario effettuare nuovamente il login dopo 30 giorni dal precedente." con un link ad una pagina dove sono spiegati diversi casi d'uso in cui la sicurezza dell'utente può essere a rischio.

Concorderai con me che vedersi buttato fuori dall'app da un giorno all'altro, senza preavviso, porta al classico "ma quest'app non funziona mai quando mi serve", sopratutto quando gli utilizzatori sono utenti medi con scarse capacità digitali.

djechelon commented 3 years ago

Ah ma io non ho dubbi che la modalità di interazione con l'utente vada cambiata. Mi pare ci siano alcuni suggerimenti tipo un preavviso, tra i ticket di GitHub.

Giorno 1 del green pass obbligatorio essere buttati fuori da IO appena fuori dal ristorante non ha prezzo. Per tutto il resto ci sono le issue

tesfabpel commented 3 years ago

Forse un miglioramento potrebbe essere rinnovare la sessione ogni volta che si apre l'app (magari limitato una volta al giorno)? Oppure fare in modo che dopo i trenta giorni l'app invece di fare il logout entri in una modalità sola lettura o ridotta dove almeno notifiche e green pass siano accessibili? O una combinazione delle due... Alla fine credo che i vari servizi online o altre app rinnovino la sessione ad ogni richiesta online...

djechelon commented 3 years ago

Se il problema è il green pass, questo andrebbe esportato con l'apposita funzione così rimane permanentemente in galleria.

L'idea invece di creare una modalità offline di IO in cui puoi vedere solo i vecchi contributi (compreso green pass e pagamenti PagpPA passati) è allettante. Non so quanto fattibile. Non sono del team di sviluppo e non prendo questa decisione, "io"...

Undermaken commented 3 years ago

Come avete già supposto il motivo principale dei 30 giorni è legato al sistema di autenticazione. Il token SAML non può essere revocato e nemmeno rinnovato automaticamente.

Quando si entra in IO si usa un identity provider (sia esso SPID o CIE) per essere riconosciuti come cittadini in IO. Da quel momento in poi la sessione esiste solo tra l'app e IO, intesa come piattaforma. Gli identity provider non entrano più in gioco.

Quindi IO, su indicazione stessa del garante e seguendo le linee guida AGID in merito a SPID/CIE, può tenere "viva" la sua sessione per max 30 giorni.

IO infatti, in quei 30 giorni, non sa se il cittadino esiste ancora presso SPID, se ha revocato la sua identità digitale, o se ha cambiato qualche attributo (tipo il cognome, la data di nascita, o altro)

Una mitigazione potrebbe essere appunto rendere noto in app tra quanto scade la sessione così che il cittadino non venga sorpreso sconnesso proprio nel momento del bisogno.

Il GreenPass è meglio esportarlo come immagine e salvarlo dove e meglio si credo cosi da averlo a disposizione anche offline

djechelon commented 3 years ago

Altra alternativa, ma richiede l'intervento di AGID, è un flusso semplificato di rinnovo SPID usando solo un fattore di autenticazione senza ripetere la solfa (il più alto ovviamente). Ma richiede un intervento normativo (decreto tecnico) e implementazione da parte di tutti gli IdP.

Forse meglio usare la CIE, chi ce l'ha.

Magari due righe su Forum Italia appena ho tempo...

github-actions[bot] commented 2 years ago

This issue is stale because it has been open for 60 days with no activity. If the issue is still present, please leave a comment within 14 days to keep it open, otherwise it will be closed automatically.

github-actions[bot] commented 2 years ago

This issue was closed because it has been inactive for 14 days since being marked as stale.