使用授权属性ASP.Net MVC

时间:2013-07-08 15:09:49

标签: asp.net-mvc

我使用Authorize属性检查用户是否被授权进入特殊视图。

    [HttpGet]
    [Authorize]
    public ActionResult Index(int ID)
    {
             ViewBag.sID = ID;
             return View();
    }

假设这是mu URL:localhost:16621 / Panel / Index / 1 现在,此授权用户可以更改1到2并导航到另一个用户信息。像localhost:16621 / Panel / Index / 2 怎么防止这个?有没有办法将参数传递给authorize属性? 如何防止用户访问其他用户信息?

2 个答案:

答案 0 :(得分:4)

我担心没有神奇的开关 - [授权]只是启动未经授权的用户,不在指定范围内的用户或用户角色错误。上下文绑定数据的安全性取决于您 - 如果传递的id不适用于实际用户,您必须在Index()体内执行此操作并将用户重定向到其他位置。

答案 1 :(得分:1)

有一个“AuthenticationFilter”ASP.NET MVC5可用于此目的。

  

Authentication filters

     

身份验证过滤器是ASP.NET MVC中的一种新型过滤器   在ASP.NET MVC管道中的授权过滤器之前运行   允许您指定每个操作,每个控制器的身份验证逻辑,   或全局的所有控制器。验证过滤器过程   请求中的凭据并提供相应的主体。   身份验证筛选器还可以添加身份验证挑战   回应未经授权的请求。

请参阅this tutorial了解如何使用它。

using System.Web.Mvc;
using System.Web.Mvc.Filters;

namespace VSMMvc5AuthFilterDemo.CustomAttributes
{
  public class BasicAuthAttribute : ActionFilterAttribute, IAuthenticationFilter
  {
    public void OnAuthentication(AuthenticationContext filterContext)
    {
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
      var user = filterContext.HttpContext.User;
      if (user == null || !user.Identity.IsAuthenticated)
      {
        filterContext.Result = new HttpUnauthorizedResult();
      }
    }
  }
}