2

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

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

我在这个盒子外面想的太过分了吗?

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

UPDATE 真正的问题我已经是现有的传统认证,我需要使用一些用户,对窗体身份验证,我需要为他人之间。 Windows与表单身份验证不是真正的问题,因为LogIn表单没有用于其中一个。但请考虑自定义身份验证和表单身份验证。 LogIn表单与FormsAuthentication,更具体地说是System.Web.Security紧密结合。 (即Membership.ValidateUser,FormsAuthentication.SetAuthCookie等)。

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

到目前为止,这是否更有意义我的问题是什么?

回答

1

它们实际上并不紧密结合。模板只是为了让你快速启动并运行。

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

在配置窗体身份验证网站,例如,你会看到一行在Web.config这样的:

<authentication mode="Forms"> 

您可以更改到:

<authentication mode="Windows"> 

这不是唯一的区别(与Windows认证,例如,你不需要需要登录页面),但它是最重要的。您根据ASP.NET Membership API编写代码,并且只在必要时才特别针对Forms身份验证。

+0

当网站在本地使用时,我会进行Windows身份验证,但这些用户在不在网络上时可能需要访问网站。在这种情况下,他们需要使用表单身份验证登录。然而,客户需要登录,但会使用预先存在的身份验证系统,该系统不使用aspnet形式验证表,视图等。 – 2012-01-09 15:38:55

1

我同意克雷格的答案。我唯一需要补充的是,我认为你可以在web.config中改变任何东西来松散耦合。原因是,当您为您的MVC应用程序创建部署包时,您可以应用web.config transforms

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

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