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

Mic*_*hel 1 asp.net-mvc forms-authentication owin asp.net-identity

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

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

  private IAuthenticationManager AuthenticationManager
    {

        get
        {
            return HttpContext.GetOwinContext().Authentication;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

我想确保我有正确的对象.

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

Adm*_*vić 6

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)和系统.Web正在利用IIS进行MVC目的.

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

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

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