Asp.net mvc MVC表单身份验证允许传递

Asp.net mvc MVC表单身份验证允许传递,asp.net-mvc,authorization,forms-authentication,asp.net-mvc-5,Asp.net Mvc,Authorization,Forms Authentication,Asp.net Mvc 5,我有一个MVC 5应用程序,它的[Authorize]属性位于我的控制器类的顶部,我不希望未经授权的用户访问它。我的Web.config文件中的设置中包含以下内容 <location path=""> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> <authorizati

我有一个MVC 5应用程序,它的[Authorize]属性位于我的控制器类的顶部,我不希望未经授权的用户访问它。我的Web.config文件中的设置中包含以下内容

<location path="">
  <system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" />
  <authorization>
    <deny users="?"/>
  </authorization>
  <authentication mode="Forms">
    <forms loginUrl="~/Login" timeout="15" />
  </authentication>
</system.web>
</location>


当我运行应用程序时,我会被重定向到登录页面,但是,如果我知道我想要的控制器/操作的名称,我可以绕过登录页面而不输入任何凭据,例如,我在类级别上放置了[Authorize]属性的同一个控制器。这不应该发生。我意识到这可能与我的路径“”有关,但我正在尝试拒绝所有访问,直到用户登录,我尝试了“*”和“~”,但它们不起作用。

首先,MVC5默认情况下不使用FormsAuthentication。它使用ASP.NET标识。因此,将身份验证格式设置为“窗体”将导致出现问题,除非您实际使用的是Windows窗体。事实上,您可能会在web.config中发现这一点,它会完全禁用它:

<system.webServer>
  <modules>
    <remove name="FormsAuthenticationModule" />
  </modules>
</system.webServer>

其次,微软的官方立场是不能通过web.config位置配置来保护MVC应用程序

不能使用路由或web.config文件保护MVC应用程序。保护MVC应用程序的唯一受支持的方法是对每个控制器应用Authorize属性,并在登录和注册操作上使用新的AllowAnonymous属性。基于当前领域做出安全决策是一件非常糟糕的事情,它会使您的应用程序面临漏洞

MVC应用程序中不应使用基于Web.config的安全性。原因是多个URL可能会击中一个控制器,而将这些检查放在Web.config中总是会遗漏一些内容


我通读了这篇文章,发现它很有帮助,但它不能解决我的问题。@user2146538-不,它不能解决你的问题,因为你不能用你试图做的方式来做事情。你介意告诉我怎么做吗。这是本文的重点。@user2146538-您的问题中没有足够的信息来建议任何替代方案。你甚至不知道你在用什么样的身份验证。。。在不知道您实际在做什么的情况下,我们无法解决您的问题。我所要求的可以完成,不建议这样做。很明显,你没有阅读我的问题,而是试图提高你的声誉,但从提供的链接提供了一个复制/粘贴答案。这对Eric并没有多大帮助,很明显我在帖子中两次提到了“表单”身份验证。