Asp.net mvc 关于管理员的[授权]属性的问题
如果我的ASP.NET MVC 3(Razor)Web应用程序中有一个区域,其中所有控制器都派生自一个基本控制器,如下所示:Asp.net mvc 关于管理员的[授权]属性的问题,asp.net-mvc,security,forms-authentication,roles,authorize-attribute,Asp.net Mvc,Security,Forms Authentication,Roles,Authorize Attribute,如果我的ASP.NET MVC 3(Razor)Web应用程序中有一个区域,其中所有控制器都派生自一个基本控制器,如下所示: [Authorize(Roles="Administrator")] public class AdminController : Controller { } 当非管理员尝试访问该区域中的URL时,他们会被重定向到web.config中指定的登录页面 但是,如果用户已经过身份验证,但不是管理员,那么这就没有意义了。在这种情况下,我们不应该返回HTTP 401吗 我的
[Authorize(Roles="Administrator")]
public class AdminController : Controller
{
}
当非管理员尝试访问该区域中的URL时,他们会被重定向到web.config中指定的登录页面
但是,如果用户已经过身份验证,但不是管理员,那么这就没有意义了。在这种情况下,我们不应该返回HTTP 401吗
我的问题基本上是人们如何处理这个问题-他们是否创建自定义授权属性?我们为此类场景提供了自定义授权过滤器属性,并将用户带到自定义错误页面
public void OnAuthorization(AuthorizationContext filterContext) {
if(//user does not have permission){
filterContext.Result = new RedirectResult("/Error/AccessDenied");
}
如果未经授权的用户试图访问标有Authorize属性的方法,MVC框架将返回401HTTP状态代码。如果站点配置为使用ASP.NET表单身份验证,401状态代码将导致浏览器将用户重定向到登录页面 参考文献: 其他类似问题:请参阅此线程。。。 您真正想要做的是返回403代码。401用于身份验证挑战。ASP.NET表单授权拦截401并将用户推送到登录页面
如果您仍然想执行401,您能描述一下最终用户的预期体验吗?我使用ASP.NET MVC4 Beta,今天我注意到,如果我将
ReturnUrl
参数添加到querystring,表单模块不会更改响应
因此,如果操作i/Rate具有属性[Authorize]
,则
<a href="/xm/i/Rate?pid=3&count=2&ReturnUrl=%2F">..</a>
返回401。我不知道这是错误还是功能,但现在它可以正常工作。是的,我想到了,但我真的不想返回页面。我想返回HTTP 401(通过IIS)是的,我想要401,但我不想要重定向。如果他们已通过身份验证,但未经授权,则不应将他们带到登录页面。我投票决定关闭此页面-因为我发现了另一个确切的问题:。虽然那是两年前的事了,但还是一样的问题吗?是的,同样的问题。顺便说一句,您可以编写自己的Authorize,并让它抛出一个包含401的
HttpException
。是的,这将不得不这样做。谢谢。对我来说听起来像个bug-我只是天真地将ReturnUrl添加到一个需要授权的URL中,我得到了401-你的答案帮助我-谢谢!我很高兴我的评论有帮助;)