asp.net mvc5表单身份验证,OWIN如何到位



我开始了一个新的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,所以你可能现在开始构建一个应用程序,将需要大量的重构。

相关内容

  • 没有找到相关文章

最新更新