Источники сообщают, что если дочерний класс ClaimsAuthorizationManager
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, чтобы сообщать клиентам о несанкционированном доступе.