Qual è il modo migliore per gestire una password scaduta in una applicazione ASP.NET MVC ?ASP.NET MVC - Come gestire una password scaduta?
Mi spiego - ASP.NET MVC è ovviamente impostato (sia in app barebone l'esempio NerdDinner) per gestire i seguenti scenari:
- registrare nuovi utenti
- consentire loro di cambiare la propria password
- Entra utilizzando un account/password valida
Quello che non ha è davvero un buon modo per effettuare le seguenti operazioni:
- forzare l'utente a modificare la propria password se è scaduto
Il modo in cui ASP.NET MVC di punti di pensiero per l'idea di avere l'utente andare a un URL/vista separata per eseguire le modifiche delle password .
Il problema con questa idea è che non voglio che le persone a essere in grado di andare a questo URL se non sono connessi, e non voglio che siano in grado di andare da nessuna altra nel sito con una password scaduta.
In passato il modo in cui l'ho gestito è quello di impedire all'utente di uscire dalla pagina di accesso e di visualizzare un pannello ASP.NET con il bit "oh hey è necessario modificare la password" e nascondere il resto della pagina. A questo punto l'utente non ha ancora effettuato l'accesso, quindi non sarà autenticato e non potrà andare da nessuna parte finché non cambierà la sua password.
Ma ASP.NET MVC rende questo difficile. Se mi piace farlo sopra e avere tutto nella pagina di accesso, allora devo avere una azione di login() molto ingombrante per gestire tutti i possibili valori pubblicati. Se lo faccio pubblicare su un'altra azione/vista, corro il rischio di dover accedere l'utente o fare in modo che la pagina della password di modifica non sia protetta dall'autenticazione (poiché, a differenza del bit "change password" che viene fornito, I non voglio che siano autenticati quando vedono la pagina).
Posso immaginare alcuni scenari in cui si imposta qualcosa in ViewData per indicare che la password è scaduta e si ostina a reindirizzare l'utente alla pagina "Cambia password", ma non sono sicuro che sia una cosa sicura da fare .
Penso che non sia una buona idea creare attributo RequiresUnexpiredPassword perché sarà necessario applicare questo attributo a TUTTI i controller [Supponendo che l'autore non desideri che l'utente sfoglia l'applicazione con la password scaduta]. È meglio modificare il comportamento dell'attributo Autorizza stesso. – SolutionYogi
Devi ricordarti di decorare anche i metodi/controller con l'attributo Authorize. Come ho detto, potresti estendere il filtro di autorizzazione O avere un attributo separato. Un attributo separato sarebbe in linea con il principio della responsabilità unica e sarebbe anche flessibile. In questo caso, tuttavia, probabilmente andrò con il mio primo suggerimento - che è anche il tuo suggerimento meno l'eccezione - e utilizzare un filtro di autorizzazione personalizzato. – tvanfosson
Sì, ma l'attributo Authorize è già presente, quindi è un punto controverso. – SolutionYogi