2013-07-08 87 views
2

我使用授权属性来检查用户是否被授权或不要进入特殊视图。使用授权属性ASP.Net MVC

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

假设这是亩URL:本地主机:16621 /面板/索引/ 1 现在,这个授权用户可以更改为1〜2,然后导航到另一个用户的信息。像本地主机:16621 /面板/索引/ 2 如何防止这种?有没有办法将参数传递给授权属性? 如何防止用户访问其他用户信息?

+2

安吉丽娜。这已经是很多时间了。 http://stackoverflow.com/questions/2329197/custom-form-authentication-authorization-scheme-in-asp-net-mvc?rq=1 http://stackoverflow.com/questions/427598/customizing-authorization- in-asp-net-mvc?rq = 1 http://stackoverflow.com/questions/554094/asp-net-mvc-adding-to-the-authorize-attribute?rq=1 –

+0

看看这篇文章,它正是你想要的。 http://stackoverflow.com/questions/10064631/mvc-3-access-for-specific-user-only – SOfanatic

回答

4

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

+2

这不是一个好的解决方案。最好使用自定义的授权属性。 – ataravati

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(); 
     } 
    } 
    } 
}