risposta

9

identità non ha un modo integrato per monitorare gli accessi simultanei, ma si può fare un work-around: ogni volta che i log-in dell'utente, prima di impostare auth-cookie, il cambiamento dell'utente SecurityStamp da await userManager.UpdateSecurityStampAsync(user.Id);

E assicurarsi di avere questa parte nella tua Startup.Auth.cs:

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      Provider = new CookieAuthenticationProvider 
      { 
       // Enables the application to validate the security stamp when the user logs in. 
       // This is a security feature which is used when you change a password or add an external login to your account. 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(5), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      } 
     });    

in questo modo ogni volta all'utente di log-in, verrà invalidato tutte le altre sessioni perché l'SecurityStamp su utente viene modificato. E lo validateInterval a un valore sufficientemente basso, quindi altri cookie di autenticazione possono essere invalidati abbastanza presto.

+0

Stavo cercando un modo per evitare il login se esiste una sessione attiva per quell'utente. UserManager.GetSecurityStampAsync farebbe il trucco? –

+1

@ThiagoCustodio 'GetSecurityStampAsync' restituirà solo un timbro di sicurezza che è un GUID memorizzato nel record dell'utente, da solo non fa molto. Per evitare di accedere alla seconda volta, è molto più complesso: dovrai in qualche modo tenere traccia della sessione corrente, conservare l'ID per quello, mettere quell'ID in auth-cookie e al momento del login verificare se la sessione corrente è la stessa di quella già memorizzata . E posso prevedere un mucchio di problemi con questo approccio. In definitiva, se si desidera che gli utenti interrompano la condivisione di un accesso, l'approccio suggerito li renderà abbastanza presto che la condivisione delle password non è buona. – trailmax

+0

attendi userManager.UpdateSecurityStampAsync (user.Id), in quale file in MVC 5? – SAR

Problemi correlati