如何使用授权和身份验证“锁定”MVC?

时间:2017-07-18 20:18:57

标签: asp.net-mvc authentication authorization

当用户访问网站时,我被要求使用MVC创建一个poc。它会限制对开箱即用的整个网站(授权)的访问。然后开发人员将开始添加授权属性来解锁页面和功能。这种方法可行吗?

目前在MVC中,默认情况下,一旦经过身份验证,所有内容都将“解锁”给最终用户。然后开发人员将添加授权属性以开始锁定站点,这与我负责的方法相反。

此方法的用例是当开发人员忘记将authorize属性添加到关键操作时。在这种情况下,现在可以向经过身份验证的任何人使用该应用程序解锁敏感功能。注意:在此方案中,控制器没有authorize属性。

编辑:添加了代码段

一个FilterConfig

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

的Web.Config

<authentication mode="Windows" />

控制器

public class HomeController : Controller
{
    [Authorize(Users = "Bob")]
    public ActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public ActionResult Login()
    {
        return View(new LoginModel());
    }

    [HttpPost]
    public ActionResult Login(LoginModel model)
    {
        return RedirectToAction("Index");
    }
}

EDIT2:

经过几个小时的工作......我想我意识到我做得对。但是,没有声明属性而没有抛出401的原因是因为该属性当然会触发抛出401的代码!大声笑我不知道我是如何错过这一点但希望没有人陷入我今天的循环中。如果我错了,请随意纠正我!

1 个答案:

答案 0 :(得分:0)

使用FilterConfig全局添加AuthorizeAttribute,然后根据需要使用控制器或操作上的AuthorizeAttribute显式指定AllowAnonymousAttribute或特定角色。

App_Start \ FilterConfig.cs:

<div class="page">
  <div class="content">
    <img src="http://via.placeholder.com/900x400" alt="" width="900" height="400">
    <p>content</p>
  </div>
  <div class="sidebar">
    <p>sidebar</p>
  </div>
</div>