关于[授权]管理员属性的问题

时间:2011-04-21 04:27:47

标签: asp.net-mvc security forms-authentication roles authorize-attribute

如果我的ASP.NET MVC 3(Razor)Web应用程序中有 Area ,那么所有控制器都来自一个如下所示的基本控制器:

[Authorize(Roles="Administrator")]
public class AdminController : Controller
{

}

当非管理员尝试访问该区域中的URL时,会将其重定向到web.config中指定的登录页面。

但是,如果用户已经过身份验证,而不是管理员,则这没有任何意义。在那种情况下,我们不应该返回HTTP 401吗?

我的问题基本上是人们如何处理这个问题 - 他们是否创建了自定义授权属性?

4 个答案:

答案 0 :(得分:2)

看到这个帖子...... ASP.Net converts 401 to 302 error codes

您真正想要做的是返回403代码。 401用于认证挑战。 ASP.NET表单授权拦截401并将用户推送到登录页面。

如果你还想做401,你能描述一下最终用户的预期体验吗?

答案 1 :(得分:1)

我使用ASP.NET MVC4 Beta,今天我注意到如果我将ReturnUrl参数添加到querystring,则表单模块不会更改响应。

因此,如果操作i / Rate具有属性[Authorize],那么

<a href="/xm/i/Rate?pid=3&amp;count=2&amp;ReturnUrl=%2F">..</a>

返回401.我不知道它是bug还是功能,但现在它的工作原理如上所述。

答案 2 :(得分:0)

我们为这些场景设置了自定义过滤器属性,我们将用户带到自定义错误页面

public void OnAuthorization(AuthorizationContext filterContext) {


if(//user does not have permission){

filterContext.Result = new RedirectResult("/Error/AccessDenied");

}

答案 3 :(得分:0)

如果未经授权的用户尝试访问使用Authorize属性标记的方法,则MVC框架将返回401 HTTP状态代码。如果站点配置为使用ASP.NET表单身份验证,则401状态代码会导致浏览器将用户重定向到登录页面。

Refrence:http://msdn.microsoft.com/zh-tw/library/system.web.mvc.authorizeattribute.aspx

其他类似问题:How to intercept 401 from Forms Authentication in ASP.NET MVC?