1

Источники говорят, что если дочерний класс ClaimsAuthorizationManagerCheckAccess возвращает false, то при разработке структуры он генерирует исключение безопасности.Производные претензииAuthorizationManager.CheckAccess Возврат False в ASP.net MVC Web API

Невозможно поймать эту ошибку, если я хочу украсить функцию 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 сообщали о несанкционированном доступе к клиентам.

+0

ли вы достичь лучшего решения? Неверно возвращать 500, когда он, очевидно, должен быть 401. Думая, что мне лучше реализовать пользовательский AuthenticationFilter, потому что я могу легко вернуть 401 из одного из них. – Farinha

ответ

0

Это только идея, но я полагаю, вы могли бы также установить флаг в контейнере Items, а затем в Application_EndRequest вы можете проверить, если эти два условия имеют место:

  • ответа код состояния 500
  • флаг установлен

В таком случае вы можете просто изменить код состояния 401.