我开始了一个新的MVC5项目,并正在实现表单身份验证(我曾经使用自定义代码来检查用户凭据和FormsAuthentication
对象登录和注销)。
现在我已经读到标识模型已经更改,但是我在生成的代码中看到了这行代码:
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
因为稍后在该对象上完成登录(AuthenticationManager.SignIn
)
我想确保我得到了正确的对象。
我读到OWIN是关于ASP解耦的。. NET从IIS,所以我不确定为什么我需要这个GetOwinContext
,因为我不使用OWIN(至少我认为)?
. NET MVC 5使用常规的IIS集成管道进行操作,其中涉及很多步骤,如AuthenticateRequest, PostAuthenticateRequests等。FormsAuthenticationModule负责管理表单认证过程,包括从cookie中解密/提取用户信息,它集成在这些步骤中的几个。
现在,当涉及到OWIN时,它正在使用完全不同的方法,这将是近期唯一的方法,所以您可能会考虑完全放弃表单身份验证,因为在这一点上,有几种更好的方法来实现您的安全性。
如果你使用IIS集成管道,并想跳过所有的OWIN的东西(我强烈建议反对),你可以检查类ClaimsAuthenticationManager, ClaimsAuthorizationManager和SessionAuthenticationModule。这些有效地取代了RoleManagerModule和FormsAuthenticationModule,以允许基于声明的访问控制,这是基于声明的概念,这反过来又用于所有现代身份验证协议,如WS-Federation, OAuth2等。
回到OWIN部分——OWIN有它自己的管道,使用一些"桥接"程序集也可以连接到IIS事件,这意味着你有OWIN web服务器在后台运行(Microsoft.Owin.SystemWeb)和System。利用IIS实现MVC目的的Web。
所以当你在MVC 5中使用OWIN认证时,你基本上仍然使用IIS集成管道用于MVC,但你使用OWIN中间件用于安全,这是OWIN管道的一部分。
现在为了访问那个OWIN管道,你需要做GetOwinContext。OwinContext是以前使用的HttpContext的OWIN版本,除了在基本级别上有很大的不同。OWIN中间件只在OwinContext (IOwinContext)上运行,所以要使用中间件你需要访问上下文,因为上下文有中间件需要的信息。
不幸的是,这相当复杂,但我强烈建议你开始阅读OWIN和Katana,并关注vNext,因为表单认证现在已经过时了,并且肯定会停止支持vNext,所以你可能现在开始构建一个应用程序,将需要大量的重构。