2

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

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

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

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

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

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

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

4

2 回答 2

1

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

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

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

<authentication mode="Forms">

您可以将其更改为:

<authentication mode="Windows">

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

于 2012-01-09T15:04:03.823 回答
1

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

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

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

于 2012-01-09T15:23:30.760 回答