Sviluppiamo un'applicazione client Windows che memorizza localmente nella cache le credenziali di un utente per la connessione alla nostra applicazione server utilizzando API di gestione delle credenziali di Windows .
La nostra logica di memorizzazione nella cache funziona nel seguente modo:
- L'utente apre l'applicazione e seleziona un server nell'interfaccia utente. Quindi interroga il server per i requisiti di autenticazione. (Se non sono necessarie credenziali, ci colleghiamo senza autenticazione.)
- L'applicazione legge la cache per vedere se ci sono credenziali memorizzate nella cache.
- Se sono presenti credenziali memorizzate nella cache , vengono utilizzate. In caso contrario, l'API di Windows viene utilizzata per visualizzare una finestra di dialogo .
- L'applicazione tenta di autenticare con il server utilizzando le credenziali.
- Se la connessione ha esito positivo, le credenziali utilizzate sono memorizzate nella cache per la durata della sessione di Windows (questa è una funzionalità dell'API di Windows). In caso contrario, svuota la cache e torna al passaggio 3.
La domanda è: ci sono altre situazioni valide in cui la cache delle credenziali dovrebbe essere cancellata? In altre parole, quali considereresti come best practice su come gestire la durata e la logica di invalidazione per questo informazioni potenzialmente sensibili?
(Poiché probabilmente verrà richiesto, le informazioni memorizzate utilizzando questa API vengono crittografate utilizzando la nostra logica di crittografia e archiviate in memoria tramite SecureString. Indubbiamente esistono potenziali lacune in questo approccio, ma ciò vale per un'altra discussione.)