2016-03-22 21 views
5

Quello che voglio fare è limitare un ID utente alla sola possibilità di accedere a un dispositivo alla volta. Ad esempio, l'ID utente "abc" accede al proprio computer. L'ID utente "abc" ora tenta di accedere dal proprio telefono. Quello che voglio succedere è uccidere la sessione sul loro computer.Asp.net identità mvc SecurityStamp signout ovunque

Sto utilizzando l'appartenenza Identity mvc di Asp.net e utilizzo di SecurityStamp per questo scopo. Questo è il mio codice Account azione/Login:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     var user = UserManager.FindByEmail(model.Email); 
     var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
     await UserManager.UpdateSecurityStampAsync(user.Id); 

Secondo il metodo doc UpdateSecurityStampAsync dice: generare un nuovo timbro di sicurezza per un utente, utilizzato per la funzionalità SignOutEverywhere. Ma non funziona.

risposta

3

Se si desidera abilitare l'annullamento istantaneo dei cookie su altri dispositivi, quindi ogni richiesta deve raggiungere il database per convalidare il cookie. Per fare ciò è necessario configurare l'invalidazione dei cookie in Auth.Config.cs e impostare validateInterval su 0:

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<UserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromSeconds(0), 
        regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    }    
); 
+0

Sì. E 'un colpo di database in più su ogni richiesta – tmg

+0

provare UpdateSecurityStampAsync prima di PasswordSignInAsync – tmg

+0

Non riesci a disconnetterti o su altri dispositivi l'utente non ottiene il logout? – tmg

Problemi correlati