我正在尝试在我的MVC项目中实现身份验证。问题是我已经实施了ASP.NET身份OWIN。我可以成功验证,一切看起来都不错。
问题是还有其他项目(例如服务层)通过System.Threading.Thread.CurrentPrincipal.Identity
在此服务层中,值将值施放到自定义类中,如下所示:
public MyCompanyIdentity Identity
{
get { return System.Threading.Thread.CurrentPrincipal.Identity as MyCompanyIdentity ; }
}
MyCompanyIdentity类的内容如下:
public class MyCompanyIdentity : IIdentity
{
public MyCompanyIdentity ();
public string EndUserName { get; set; }
public string Exception { get; set; }
public string Ticket { get; set; }
public string Company { get; set; }
public string Fullname { get; set; }
public string Email { get; set; }
public bool IsAuthenticated { get; }
public string Name { get; }
public string AuthenticationType { get; }
}
在我的控制器类中,我将身份验证设置为如下:
var userStore = new UserStore<DemoApplicationUser>(new PeopleSaaIdentityContext());
var userManager = new UserManager<DemoApplicationUser>(userStore);
var user = userManager.Find(username, password);
if (user != null)
{
var authManager = HttpContext.Current.GetOwinContext().Authentication;
ClaimsIdentity userIdentity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
authManager.SignIn(new Microsoft.Owin.Security.AuthenticationProperties() { IsPersistent = true }, userIdentity);
//How do I cast/convert the System.Threading.Thread.CurrentPrincipal.Identity to a MyCompanyIdentity?
}
由于我无法访问源代码,因此无法将MyCompanyIdentity
更改为实现IdentityUser
。
如何"铸造/转换"到IIdenityUser
?我想恢复与应用程序中任何地方使用的同一类。
我真的希望这是有道理的,让我知道,我会尝试进一步解释。
它别无选择,只能从头开始重写逻辑。