Asp.net mvc身份SecurityStamp随处可见

我想要做的是将用户ID限制为只能一次登录到一个设备。 例如,用户ID“abc”登录到他们的计算机。 用户ID“abc”现在尝试从手机登录。 我想要发生的是在他们的计算机上杀死会话。

我正在使用Asp.net mvc身份成员资格并使用SecurityStamp来实现此目的。 这是我在帐户/登录操作中的代码:

[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task 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); 

根据UpdateSecurityStampAsync方法,doc说:为用户生成一个新的安全标记,用于SignOutEverywherefunction。 但它不起作用。

如果要在其他设备上启用cookie的即时失效,则每个请求都必须访问数据库以validationcookie。 为此,您需要在Auth.Config.cs中配置cookie失效并将validateInterval设置为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( validateInterval: TimeSpan.FromSeconds(0), regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager)) } );