Asp.net mvc 3 MVC3松散耦合认证

Asp.net mvc 3 MVC3松散耦合认证,asp.net-mvc-3,forms-authentication,windows-authentication,custom-authentication,Asp.net Mvc 3,Forms Authentication,Windows Authentication,Custom Authentication,现成的MVC3应用程序在使用Intranet项目模板或Internet项目模板的表单身份验证时允许Windows身份验证。我有一个我想使用的网站。此外,我还有一个现有的站点,它使用自己的自定义身份验证类型对用户进行身份验证(没有授权或角色,只有身份验证)。除了用于身份验证的遗留系统的数据之外,我可能还需要使用每个系统的功能。因此,我试图确定一种抽象身份验证并将其解耦的方法。我想使用某种依赖注入,完全基于配置,这样我就可以在两个不同的位置部署同一个站点,并且只通过更改配置来切换身份验证模型(Win

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

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

我是不是想得太离谱了

这是可能的,还是这种紧密耦合的原因

更新 我面临的真正问题是,我需要为某些用户使用现有的遗留身份验证,而不是为其他用户使用表单身份验证。 Windows与窗体的身份验证并不是一个真正的问题,因为登录窗体并没有被用于验证。但是考虑了自定义认证和表单认证。登录表单与FormsAuthentication紧密耦合,更具体地说是与System.Web.Security。(即Membership.ValidateUser、FormsAuthentication.SetAuthCookie等)

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


到目前为止,这在我的问题是什么方面更有意义吗?

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

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

例如,在为Forms auth配置的站点中,您将在
Web.config
中看到一行,如:

<authentication mode="Forms">

您可以将其更改为:

<authentication mode="Windows">


这不是唯一的区别(例如,使用Windows auth,您不需要登录页面),但这是最重要的。您可以基于ASP.NET会员API编写代码,并且只有在必要时才进行目标表单身份验证。

我同意Craig的回答。我唯一需要补充的是,我考虑了任何可以在Web.CONFIG中改变的东西,以松耦合。原因是您可以在为MVC应用程序创建部署包时应用

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


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

当站点在本地使用时,我将使用windows auth,但这些用户可能需要在不在网络上时访问该站点。在这种情况下,他们需要使用表单身份验证登录。但是,客户需要登录,但将使用预先存在的身份验证系统,该系统不使用aspnet表单身份验证表、视图等。。。