【问题标题】:MVC3 Loosly coupled authenticationMVC3 松耦合认证
【发布时间】:2012-01-09 14:50:14
【问题描述】:

开箱即用的 MVC3 应用程序在使用 Intranet 项目模板或 Internet 项目模板的表单身份验证时允许 Windows 身份验证。我也有一个我想使用的网站。此外,我有一个现有的站点,它使用它自己的自定义类型的身份验证来验证用户(没有授权或角色,只是标识)。除了来自旧系统的数据进行身份验证之外,我可能还需要使用每个功能。因此,我正在尝试确定一种方法来抽象我的身份验证并将其解耦。我想使用某种完全基于配置的依赖注入,因此我可以在两个不同的位置部署同一个站点,并通过仅更改配置来切换身份验证模型(Windows Auth/Forms Auth/Custom Auth)。

目前,我使用过的所有 ASP.NET 应用程序,包括 MVC3 模板项目,似乎都与所使用的身份验证类型紧密结合。

我是不是在这个问题上想得太远了?

这可能吗,或者这种紧密耦合是否有原因?

更新 我遇到的真正问题是我需要为某些用户使用的现有旧式身份验证与我需要为其他用户使用的表单身份验证之间。 Windows 与 Forms 身份验证并不是真正的问题,因为登录表单没有用于其中。但请考虑自定义身份验证和表单身份验证。 LogIn 表单与 FormsAuthentication 紧密耦合,更具体地说与 System.Web.Security 耦合。 (即 Membership.ValidateUser、FormsAuthentication.SetAuthCookie 等...)。

我想将要使用的身份验证注入到我的 AccountController 中,而不是使用 FormsAuthentication 和 Membership。

到目前为止,我的问题是什么?

【问题讨论】:

    标签: asp.net-mvc-3 forms-authentication windows-authentication custom-authentication


    【解决方案1】:

    它们实际上并没有那么紧密耦合。这些模板只是想让您快速启动并运行。

    ASP.NET 成员资格同时支持表单和域身份验证。

    例如,在为表单身份验证配置的站点中,您会在 Web.config 中看到一行:

    <authentication mode="Forms">
    

    您可以将其更改为:

    <authentication mode="Windows">
    

    这不是唯一的区别(使用 Windows 身份验证,例如,您不需要 登录页面),但它是最重要的。您基于 ASP.NET Membership API 编写代码,并且仅在需要时才针对 Forms 身份验证。

    【讨论】:

    • 当网站在本地使用时,我将进行 Windows 身份验证,但这些用户可能需要在不在网络上时访问该网站。在这种情况下,他们需要使用表单身份验证登录。然而,客户需要登录,但将使用预先存在的身份验证系统,该系统不使用 aspnet 表单身份验证表、视图等......
    【解决方案2】:

    我同意克雷格的回答。我唯一要补充的是,我认为您可以在 web.config 中更改的任何内容都是松散耦合的。原因是您可以在为 MVC 应用程序创建部署包时应用 web.config transforms

    我们使用 Unity 进行 DI/IoC,您也可以使用 Unity 在 web.config 中指定注入依赖项。您只需编写 Web.Auth1.config 来配置您的应用程序以进行一种身份验证,并编写 Web.Auth2.config 将其配置为另一种身份验证。然后,当您部署时,您只需选择目标,VS 就会为您构建正确的配置。

    如果您的源代码需要知道部署中使用了哪种类型的身份验证,您可以通过 web.config appSetting 告诉它,也可以在部署期间通过 web.config 转换进行更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      相关资源
      最近更新 更多