用户 Principle/Identityis 被 aspnet 身份 MVC5 中的第二个浏览器实例覆盖

Users Principle/Identityis overridden by second browser instance in aspnet identity MVC5

我在我的应用程序中为 authentication/Authorization 使用 aspnet identity/owin。

当我从新浏览器实例使用第二个应用程序用户登录时出现问题,而第一个已经登录,第二个浏览器可能覆盖用户 principle/identiy 对象。由于这个第一个浏览用户被注销,因为第二个用户比第一个用户具有更少的特权。

我的问题是为什么不是每个浏览器实例都维护其用户 principle/identity?我在代码中做错了什么?请帮忙。这个问题困扰了我很多天。

var identity = new ClaimsIdentity(
            new[] { new Claim(ClaimTypes.Name, model.UserName) }, 
            DefaultAuthenticationTypes.ApplicationCookie, 
            ClaimTypes.Name, 
            ClaimTypes.Role);

identity.AddClaim(new Claim(ClaimTypes.Role, roles));

var claimsPrincipal = new ClaimsPrincipal(identity);

// Set current principal
Thread.CurrentPrincipal = claimsPrincipal;

//User Added code 
await SignInAsync(user, model.RememberMe);

//set up cookie for using data across pages

Em.. 你从哪里得到这种使用 Idnetity 的方法?这在很多层面上看起来都坏了。

首先,删除 Thread.CurrentPrincipal = claimsPrincipal; - 可能这会造成很多麻烦。 Thread.CurrentPrincipal 并不总是登录到 MVC 应用程序的用户。有时(例如在应用程序启动时)这可能是 IIS 所在的用户 运行).

如果这是登录代码,请使用个人帐户在 VS 2013 中创建一个新的 MVC 项目并查看处理登录的代码 - 只需遵循该模式即可。