【问题标题】:Derived ClaimsAuthorizationManager.CheckAccess Returning False in ASP.net MVC Web API派生的 ClaimsAuthorizationManager.CheckAccess 在 ASP.net MVC Web API 中返回 False
【发布时间】:2013-08-28 15:18:57
【问题描述】:

消息称,如果ClaimsAuthorizationManagerCheckAccess 的子类返回false,根据框架设计,它会引发安全异常。

如果我想用(例如)[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Read", Resource="Something")] 来装饰 ApiController 的函数,似乎没有办法捕捉到这个错误。

我已经创建了一个示例 AuthorizationManager,派生出 ClaimsAuthorizationManager,并在 web.config 中注册了它。此配置部分有效。

public class AuthorizationManager : ClaimsAuthorizationManager
{
     public override bool CheckAccess(AuthorizationContext context)
     {
          return false; // just to show that it will throw the security exception
     }     
}

因此,我将授权设置为无论如何都会失败,但我想向用户返回 401 响应而不是那个“侵入性”500(安全异常返回为内部服务器错误)。

似乎没有人对此有任何答案,而且我们似乎只能接受 500 人向客户传达未经授权的访问。

【问题讨论】:

  • 您找到更好的解决方案了吗?当 500 显然是 401 时,返回 500 感觉是错误的。认为我最好实现自定义 AuthenticationFilter,因为我可以轻松地从其中一个返回 401。

标签: asp.net asp.net-mvc authentication authorization claims-based-identity


【解决方案1】:

这只是一个想法,但我相信您也可以在 Items 容器中设置一个标志,然后在 Application_EndRequest 中检查这两种情况是否发生:

  • 响应状态码为500
  • 标志已设置

在这种情况下,您只需将状态码更改为 401。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2014-04-04
    相关资源
    最近更新 更多