ASP.NET MVC - 用于管理的区域或单独的Web应用程序?

时间:2010-12-23 10:35:48

标签: asp.net-mvc msbuild forms-authentication administration

到目前为止,我一直在使用 MVC区域作为我的mvc应用程序的管理部分,但最近我一直在重新考虑这个由于每个应用程序的表单身份验证不能有多个配置

这已经成为一个问题,因为在最近的一个项目中我想设置auth cookie不会让用户过期,但我不想这对管理用户来说。我也不希望用户登录页面用于访问管理工具。

我正在考虑在解决方案中仅为管理工具设置一个单独的MVC项目。这在我看来是最好的选择,但我想知道部署的复杂性。(目前我在VS2008中使用Web部署项目来管理构建)。

目前有人在管理部分使用单独的MVC项目吗?任何陷阱?关于为什么这不是一个好主意的其他意见?

感谢。

4 个答案:

答案 0 :(得分:8)

我总是使用单独的网站进行管理。但这主要是因为我的网站管理与使用完全不同,因此需要不同的布局。

另一个好处是,您不必怀疑用户是否可以修改他们无法修改的内容,因为这些内容未内置到用户网站中。

<强>更新

我的意思是使用Razor或Masterpage使用webforms视图引擎进行布局。

我们使用http://admin.domainname.comhttp://www.domainname.com来分隔网站。很容易设置。

分隔站点还可以使控制器和视图更加清晰,因为它们只处理管理员或用户的任务。不需要很多ifs(否则如果你像我一样很容易添加=懒惰的编码器:)

答案 1 :(得分:2)

表单auth cookie可能是管理区域的路径限制,但在处理身份验证时会让您头疼,但可能会实现。

另一种选择,而不是使用admin.hostname.com或类似的东西,是在/ admin上使用子应用程序,但这不一定能解决您的问题。

我们将Web应用程序开发为两个不同的站点,主要是因为我们希望选择将管理与实际站点分开,也是出于可伸缩性原因。我们希望能够扩大相关的实际网站,而不是管理部分。

我们遇到了以下问题:

  1. 内容预览需要某些逻辑,这些逻辑可能需要您以某种配置存储站点的实际主机名,以便将管理员重定向到正确的站点以及处理某些安全令牌等因为用户可能未在网站上进行身份验证。如果您在同一站点(相对路径和相同的身份验证),这会容易得多。
  2. 可以同时在多个Web服务器上运行的站点(也称为Web场)需要在设计时考虑到这一点。它涉及缓存失效,配置重新加载或可能在管理界面中“修改”的任何其他应用程序存储数据等内容。然而,这在任何方法中都是一个问题。但是,如果您的站点直接依赖于Web应用程序中的任何计划工作或第三方集成,则如果您的管理站点/系统在多个服务器上运行,则可能会出现一些问题。因此,在HA IIS故障转移群集上运行管理系统可能更合适,但在负载平衡的Web场上运行实际网站(容易出现高负载)。这种设置分离有利于单独的站点。
  3. 我认为出于可伸缩性的原因,您应该考虑将问题分开,但是如果可能的话,这一切都取决于您的应用程序的设计。我们正在为某种类型的网站构建框架,这意味着设计的实际实现因客户而异,但我们需要一种标准化的方式来管理网站,因此这对我们来说是合乎逻辑的选择。

答案 2 :(得分:1)

FormsAuthentication.SetAuthCookie方法允许您控制是否在会话中持续存在。

如果他们是管理员,请将其设为false,否则设为true

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/twk5762b.aspx(第二个参数createPersistentCookie控制此内容。)

就不同类别用户的不同登录页面而言,如果他们是错误的用户类并访问错误的登录页面,则可以从身份验证方法返回false。

在设置身份验证令牌之前,所有这些逻辑都应该发生。

答案 3 :(得分:1)

出于多种原因,我宁愿将管理网站分开:

  • 由于敏感区域的访问更容易限制和控制,因此潜在的安全风险大大降低。
  • 在一个好的解决方案中,层之间的Separation of Concerns(服务/数据等)意味着连接管理站点以访问主站点上可用的功能应该相对简单。
  • 由于公司通常专注于他们的前端网站,因此开发人员往往不太关心他们的管理网站。这意味着影响管理站点的粗心错误不太可能影响主站点。
  • 我使用带有AuthorizeAttribute的基本控制器,这意味着没有正确凭据的外部用户无法访问所有操作(login除外!)。然后,如果需要,可以使用相关凭据覆盖单个操作,但通常,这是一种“一劳永逸”的方法。虽然您可以在单站点方法中使用两个基本控制器,但我相信它的可管理性稍差。