我创建了一个非常简单的授权属性对于我的MVC控制器,是为了重定向到一个控制器,允许显示一个“未授权”消息:授权不工作的自定义authorizeattribute
public class ReportAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
{
{ "action", "ReportDenied" }
, { "controller", "Authorization"}
});
}
}
我将其应用到我的主站点控制器上:
[ReportAuthorize([email protected]"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属性,以在用户匿名之前正确认证用户。
与标准authorizeattribute的问题是,如果我放下一组名我不是一个部分的它挑战我要我的凭据,但无法正确验证我和反复询问,直到我取消。 – 2014-09-03 20:04:32
@CBauer - 如果提示是你的问题,然后是,进入自定义属性。根据我的经验,这不是一个问题,因为我会使用MvcSiteMapProvider之类的功能来启用安全修剪功能,以便用户看不到指向它们未授权的URL的链接。因此用户很少遇到提示。 – Joe 2014-09-04 10:01:01
不幸的是,我试图保护的网页是通过直接链接传播的网站,如果我可以定位角色并让没有角色的人员转发到“您不被允许访问这个资源“页面。 – 2014-09-04 12:11:29