asp.net mvc5表单身份验证,OWIN如何进入?

时间:2014-05-23 07:34:58

标签: asp.net-mvc forms-authentication asp.net-identity owin

我启动了一个新的MVC5项目并且正在实现表单身份验证(我曾经使用自定义代码来检查用户凭据和FormsAuthentication对象以进行登录和注销。)

现在我已经读过身份模型已经改变,但我在生成的代码中看到了这行代码:

  private IAuthenticationManager AuthenticationManager
    {

        get
        {
            return HttpContext.GetOwinContext().Authentication;
        }
    }

因为稍后在该对象上完成了登录 (AuthenticationManager.SignIn

我想确保我找到了正确的对象。

我已经读过OWIN是关于将ASP.NET与IIS分离的,所以我不确定为什么我需要这个GetOwinContext,因为我没有使用OWIN(至少我认为) ?

1 个答案:

答案 0 :(得分:5)

ASP.NET MVC 5使用常规的IIS集成管道进行操作,涉及很多步骤,例如AuthenticateRequest,PostAuthenticateRequests等。 FormsAuthenticationModule负责管理表单身份验证过程,该过程涉及从cookie中解密/提取用户信息,并将其集成到其中几个步骤中。

现在,当谈到OWIN的部分时,它正在采用完全不同的方法,这将是近期唯一的方法,所以你可以考虑完全放弃Forms身份验证,因为此时有几个更好实现安全的方法。

如果您使用IIS集成管道并想要跳过所有OWIN事物(我强烈建议反对),您可以检查类ClaimsAuthenticationManager,ClaimsAuthorizationManager和SessionAuthenticationModule。这些有效地替换了RoleManagerModule和FormsAuthenticationModule,以允许基于声明的访问控制,该控制基于声明的概念,而后者又用于所有现代身份验证协议,例如WS-Federation,OAuth2等。

回到OWIN部分 - OWIN拥有它自己的管道,使用一些"桥接"程序集也可以挂钩IIS事件,这意味着你有在后台运行的OWIN Web服务器(Microsoft.Owin.SystemWeb)以及利用IIS进行MVC目的的System.Web。

因此,当您在MVC 5中使用OWIN身份验证时,您基本上仍在使用IIS集成管道进行MVC,但是您正在使用OWIN中间件来实现安全性,这是OWIN管道的一部分。

现在,为了访问该OWIN管道,您需要执行GetOwinContext。 OwinContext是以前使用的HttpContext的OWIN版本,除了在基础级别上它是完全不同的。 OWIN中间件仅在OwinContext(IOwinContext)上运行,因此要使用中间件,您需要访问上下文,因为上下文具有中间件所需的信息。

遗憾的是,这很复杂,但我强烈建议您开始阅读有关OWIN和Katana的内容,并注意vNext,因为Forms Authentication现在已经过时了,并且肯定不会受到vNext的支持所以你可能现在开始构建一个应用程序,以后需要进行大量的重构。