【发布时间】:2014-10-28 10:37:02
【问题描述】:
我为我的 MVC 控制器创建了一个非常简单的授权属性,旨在重定向到允许显示“未授权”消息的控制器:
public class ReportAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
{
{ "action", "ReportDenied" }
, { "controller", "Authorization"}
});
}
}
我将它应用到我的主站点控制器:
[ReportAuthorize(Roles=@"Domain\GroupName")]
public class ReportController : Controller
{
//etc
}
即使我在 @"Domain\GroupName" 中,我也会被踢出局。实际上,如果我将其更改为 Users=@"Domain\MyUserName" 它仍然失败!
我已将其追溯到为该站点启用的 IIS 设置匿名身份验证。不幸的是,我不能在我们的生产系统上禁用匿名访问,因为这个项目是一个更大的 MVC 项目的一部分,其中有许多其他控制器没有正确的属性。但是,当我在IIS中本地更改它时,我可以正常进入。
现在,如果我更改为正常的授权属性:
[Authorize(Roles = @"Domain\GroupName")]
public class ReportController : Controller
{
//etc
}
我进入(我假设是因为我没有为未经授权的用户尝试连接时定义任何特殊行为)。
我有哪些选项可以解决此属性问题?我只需要获取 ReportsAuthorize 属性以正确验证用户身份,然后再将用户踢出匿名。
【问题讨论】:
标签: asp.net-mvc iis asp.net-mvc-5 authorization custom-attributes