Ciao,
ho già implementato aspnet core identity per la gestione degli accessi e dei ruoli. Adesso vorrei limitare ogni singolo utente a singole sessioni di lavoro.
Bene, per questo puoi sfruttare il Security Stamp. E' un codice che si trova nella tabella degli utenti e che viene incluso automaticamente in ogni cookie di autenticazione. Può essere usato per risolvere il tuo problema ma dovrai fare queste due cose:
- Nel metodo ConfigureServices della classe Startup mettere questo codice:
services.Configure<SecurityStampValidatorOptions>(options =>
options.ValidationInterval = TimeSpan.FromSeconds(60));
In questo modo, ASP.NET Core verificherà se il security stamp fornito nel cookie è ancora "attuale", cioè corrispondente a quello che si trova nel database. Nel mio esempio, questa operazione di verifica verrà fatta al massimo una volta ogni 60 secondi, così che la verifica non debba essere fatta ad ogni richiesta dell'utente. Ma se tu vuoi che sia fatta più di frequente, usa TimeSpan.FromSeconds(1) o altro valore che preferisci. - Quando l'utente fa il login, rinnovi il suo security stamp così da invalidare ogni altro cookie di autenticazione emesso in precedenza (per quei vecchi cookie la verifica del security stamp fallirà). Metti qualcosa del genere nell'action di login che riceve i dati dal form.
var user = await userManager.FindByNameAsync(usernameRicevutoDalForm);
if (user != null)
{
var result = await signInManager.CheckPasswordSignInAsync(user, passwordRicevutaDalForm, false);
if (result.Succeeded)
{
await userManager.UpdateSecurityStampAsync(user);
result = await signInManager.PasswordSignInAsync(user, passwordRicevutaDalForm, ricordamiRicevutoDalForm, false);
if (result.Succeeded)
{
/*TODO: login avvenuto con successo, reindirizza all'area riservata*/
}
}
}
ciao,
Moreno
Modificato da BrightSoul il 05 settembre 2019 20:32 -
Enjoy learning and just keep making