Una funzionalità davvero interessante di ASP.NET Identity è la possibilità di invalidare i cookie di autenticazione rilasciati per un utente aggiornandone il security stamp. Per esempio, a valle di un cambio password, possiamo forzare il logout per quell'utente da tutti i client con cui si è collegato in precedenza: se pensiamo al caso di una password compromessa, ci rendiamo subito conto di quanto sia importante e utile questa funzione.
L'utilizzo è davvero semplice. Intanto dobbiamo sincerarci di utilizzare il SecurityStampValidator per validare il cookie di autenticazione. Si tratta della scelta di default, per cui con ogni probabilità su Startup.Auth.cs troveremo già il codice seguente:
public void ConfigureAuth(IAppBuilder app) { // ... app.UseCookieAuthentication(new CookieAuthenticationOptions { // ... Provider = new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator .OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) } }); // ... }
Il SecurityStampValidator associa la validità del cookie di autenticazione a un timestamp che, come possiamo notare, viene validato per default ogni 30 minuti.
A questo punto, per effettuare il sign out da remoto di tutti i client connessi, per esempio a valle del reset password, dobbiamo semplicemente forzare la rigenerazione di un nuovo security stamp:
await UserManager.UpdateSecurityStampAsync(user.Id);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il trigger SQL con le Azure Function
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Utilizzare l nesting nativo dei CSS
Gestione file Javascript in Blazor con .NET 9
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Loggare le query più lente con Entity Framework
La gestione della riconnessione al server di Blazor in .NET 9
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web