在没有控制器的情况下确保MVC中的路由安全



我有一个.Net Web项目,但大多数情况下我们使用的是html页面(理想情况下,我们会有一个网站项目)。这些页面使用RequireJS加载依赖项,因此只有Razer部分用于加载初始html页面。现在,这个网站既是一个主页,也是一个管理页面。主页不需要与管理页面处于同一级别。因此,我们使用主页的mapPageRoute来简单地指向适当的主页html页面
现在,对于管理页面,我们需要进行身份验证,并确保用户是管理员。目前,为了实现这一点,我们有一个返回视图的AdminController(我们为该视图添加了一个自定义位置,因为它不在默认的Views文件夹中)。所以我们的控制器看起来是这样的:

namespace XXXXX.YYY.Web.Controllers
{
    public class AdminController : Controller
    {
        [RequiresPrivilegeAttribute(Constants.Security.Privileges.ADMINISTER_APPLICATION)]
        public ActionResult Index()
        {
            return View();
        }
    }
}

我想做的是遵循与主页相同的模式,定义一个简单加载html文件的路径。对于主页,我们在RouteConfig中使用它(发生在App_Start上):

routes.MapPageRoute(
           "",
           String.Empty,
           "~/ui/dist/index.html"
        );

对于Admin站点路由,我们的第一个和第二个参数是"Admin",第三个参数是Admin index.html("~/ui/dist/Admin/index.html")的位置。
这对管理网站不起作用,因为它没有考虑管理员的安全性所以问题是:如何在不使用控制器的情况下保护html文件的路径

此外,我们希望最终摆脱.NET MVC应用程序,用纯HTML SPA取而代之。所以我想在不使用控制器的情况下完成这项

在ASP.net MVC应用程序中,如果没有静态html页面的控制器或映射路由,就无法查看页面。除非通过在配置文件中授权查看html页面来破坏其体系结构。这种导致异常和首选安全性的原因无法通过这种方式确保,尽管你也减少了它!

您可以尝试在Web.Config中添加它,但我以前从未在MVC上尝试过。。。

<location path="ui/dist">
<system.web>
  <authorization>
    <allow users="UsersToAllow" />
    <deny users="UsersToDeny" />
  </authorization>
</system.web>
</location>

您可以拒绝未经身份验证的用户<deny users="?"/>。此外,请阅读此链接保护您的ASP.NET MVC应用程序

最新更新