【问题标题】:asp.net mvc5 forms authentication, how does OWIN come in to place?asp.net mvc5表单认证,OWIN是怎么来的?
【发布时间】:2014-05-23 07:34:58
【问题描述】:

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

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

  private IAuthenticationManager AuthenticationManager
    {

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

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

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

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

【问题讨论】:

  • 您正在使用它进行身份验证。 OWIN 不一定与 IIS 耦合,但它们可以一起使用。
  • 谢谢,所以在我的情况下(用于检查用户凭据的自定义代码和用于登录和注销的 FormsAuthentication 对象)我与 Owin 无关?
  • 我认为这不对,但您可以尝试删除引用并查看它是否构建。

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


【解决方案1】:

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 Integrating Pipeline for MVC,但您使用的是 OWIN 中间件来确保安全,这是 OWIN 管道的一部分。

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

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

【讨论】:

  • 谢谢,我没有意识到表单身份验证会被这个取代。我放弃了表单身份验证,它可以正常工作!
猜你喜欢
  • 2015-02-22
  • 2015-06-09
  • 1970-01-01
  • 2014-04-17
  • 2023-03-07
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
相关资源
最近更新 更多