1

消息来源说,如果ClaimsAuthorizationManager's的子类CheckAccess返回 false,根据框架设计,它会引发安全异常。

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

我已经创建了一个示例 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 来向客户传达未经授权的访问。

4

1 回答 1

0

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

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

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

于 2013-08-28T15:35:33.900 回答