Tra le recenti novità di ASP.NET Identity 2, troviamo l'account lockout, un meccanismo di protezione atto a ridurre il rischio di accessi non autorizzati.
Sebbene questa sia una funzionalità automatica che causa il blocco dell'account dopo un certo numero di login falliti, possiamo sfruttarla anche on-demand, secondo le nostre necessità. Da amministratori dell'applicazione web, i motivi per cui potremmo voler bloccare un account sono molteplici:
- L'utente ha terminato il suo periodo di prova oppure la sua sottoscrizione è scaduta;
- A causa della condotta dell'utente, vogliamo imporre un periodo di fermo di durata limita o illimitata (ban);
- L'utente non è più autorizzato ad accedere al suo account, come nel caso di un ex-impiegato.
Per bloccare l'account di un utente, ottieniamo la sua istanza di ApplicationUser dallo UserManager, la nostra principale API di gestione degli utenti. A questo punto, agiamo sulle due proprietà LockoutEnabled, che valorizzeremo a true per abilitare la funzione di blocco e LockoutEndDateUtc, a cui assegneremo una data di termine.
// Cerchiamo l'utente in base alla sua email, // ma potremmo cercarlo per id, nome o con una query LINQ ApplicationUser utente = UserManager.FindByEmail("email@example.com"); // Abilitiamogli la funzione di blocco utente.LockoutEnabled = true; // Impostiamo una data di scadenza. DateTime.MaxValue // equivale a rendere il blocco permanente utente.LockoutEndDateUtc = DateTime.MaxValue; //Salviamo le modifiche UserManager.Update(utente);
In alternativa, lo UserManager ci offre dei metodi per cambiare individualmente le due proprietà, purché l'ID dell'utente ci sia noto a priori.
UserManager.SetLockoutEnabled(idUtente, true); UserManager.SetLockoutEndDate(idUtente, DateTimeOffset.MaxValue);
Quando il blocco è effettivo, l'utente vedrà apparire un messaggio al suo prossimo tentativo di login. Se abbiamo costruito la nostra applicazione usando il template per ASP.NET MVC di Visual Studio 2013, possiamo personalizzare tale messaggio dalla view /Views/Shared/Lockout.cshtml, includendo ad esempio le informazioni di contatto affinché l'utente sappia come richiedere assistenza.

In seguito, volendo sbloccare l'account, andiamo a rimuovere la data assegnata a LockoutEndDateUtc.
ApplicationUser utente = UserManager.FindByEmail("email@example.com"); // Resettiamo la data di scadenza impostandola a null utente.LockoutEndDateUtc = null; UserManager.Update(utente);
Oppure, conoscendo l'ID dell'utente:
// Usare DateTimeOffset.MinValue equivale ad impostare // la data di scadenza a null, come nell'esempio precedente UserManager.SetLockoutEndDate(utente.Id, DateTimeOffset.MinValue);
Nota: in fase di sblocco non è consigliabile riportare la proprietà LockoutEnabled a false, per non rinunciare alla funzionalità automatica di account lockout.
Bloccare un account è un ottimo sistema per inibire l'accesso all'utente senza doverlo eliminare in maniera definitiva. Questo è desiderabile perché ci consente di mantenere l'integrità referenziale tra le varie tabelle della nostra base dati e preservare quindi i contenuti generati dall'utente stesso.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Change tracking e composition in Entity Framework
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Gestione degli stili CSS con le regole @layer
Escludere alcuni file da GitHub Secret Scanning
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Path addizionali per gli asset in ASP.NET Core MVC
Potenziare la ricerca su Cosmos DB con Full Text Search
Utilizzare i primary constructor di C# per inizializzare le proprietà
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Modificare i metadati nell'head dell'HTML di una Blazor Web App
I più letti di oggi
- Implementare l'infinite scroll con QuickGrid in Blazor Server
- #vs2017 sarà rilasciato il 07/03, in concomitanza con i suoi 20 anni https://aspit.co/bfn
- Ondata di novità per Windows Azure
- Novità per Win CE: .NET compact framework e SQL Server CE 2.0
- Presentata la nuova versione di C#
- Microsoft Security Bulletin MS05-013
- Rilasciato SQL Server 2005 in italiano
- Per la settimana prossima la beta1 del primo Service Pack di VS 2005
- SSL Certificates for everyone on Azure
- Repository con code-first di Entity Framework