【问题标题】:How to find the reason for an authorization failure in如何查找授权失败的原因
【发布时间】:2012-04-20 13:48:29
【问题描述】:

我在我的 MVC3 应用程序中使用从 AuthorizeAttribute 派生的类进行全局授权。我通过filters.Add(new CtsAuthorizeAttribute());将它用作全局过滤器

现在我已经实现了一个自定义角色提供程序,并希望开始在控制器上放置更具体的授权过滤器,如下所示:

[CtsAuthorize(Roles = "systemadmin")]
public class CompanyController : CtsController

我想针对基于角色的授权失败重定向到消息页面(理想情况下只是修改失败页面的模型属性),但保留默认重定向到登录页面以针对基于登录的失败。如何在下面的覆盖中确定授权失败的原因?

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
    base.HandleUnauthorizedRequest(filterContext);
}

我可以复制“角色中的用户”检查,但它只是由这个过滤器执行的。我只是不知道如何从过滤器中学习这一点。

【问题讨论】:

  • 您认为什么是“授权失败”?您是否将身份验证失败与此分组?
  • @JeremyHolovacs,使用全局过滤器 as,失败是请求未通过身份验证,并且当我使用 Roles 应用过滤器时,用户不在指定的角色中。跨度>
  • MS 安全框架中的一个失败,因为没有区分身份验证和授权,这是非常不同的事情。我认为简短的回答是,检查用户是否经过身份验证(这应该可以通过上下文获得),然后检查角色。这是您正在寻找的粒度级别吗?
  • @JeremyHolovacs 是的,谢谢,在这种情况下,我可以安全地假设如果用户通过了身份验证,他们就没有被授权。为什么没有回答这个建议?我不知道这种情况是否是 MS 故障。此属性仅检查授权,是技术性的,在基本情况下,仅授权经过身份验证的用户。
  • 我不确定我是否理解您的评论。我给你提供了你正在寻找的信息吗?

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

您可以通过提供的上下文参数检查用户是否经过身份验证;然后可以在本地确定角色。

【讨论】:

  • 谢谢。不过,我不需要确定角色,该属性在调用 HandleUnauthorizedRequest 之前已经这样做了。
猜你喜欢
  • 2021-12-09
  • 1970-01-01
  • 2010-11-22
  • 2019-07-27
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多