0

我正在使用 ASP.NET 授权来拒绝用户在登录之前访问我的网站,但这也阻止了 Register.cshtml 页面。如何整理我的授权以允许此页面通过?

<system.web>
<authorization>
      <deny users="?" />
    </authorization>
  </system.web>

  <location path="Content">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

  <location path="Register.cshtml">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
4

2 回答 2

7

恕我直言,您不应该使用 web.config 来控制应用程序的身份验证,而是使用Authorize属性。

将此添加到您的Global.asax文件中的RegisterGlobalFilters方法下

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeAttribute());
    }

或者你也可以装饰你的控制器[Authorize]

[Authorize]
public class HomeController : Controller
{
    ...
}

对于需要匿名访问使用AllowAnonymous属性的操作

   [AllowAnonymous]
   public ActionResult Register() {
      // This action can be accessed by unauthorized users
      return View("Register");   
   }

根据参考

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

于 2013-07-10T10:57:53.780 回答
0

发生这种情况是因为您通过使用拒绝每个人的应用程序

<authorization>
      <deny users="?" />
    </authorization>

上面的代码将覆盖授予文件夹的所有权限

好主意是拒绝用户文件夹并将注册/登录/帮助/联系页面保持在根级别。

于 2013-07-10T10:24:01.173 回答