Я читаю из нескольких ресурсов (книги и ответы SO) об авторизации в WebApi.
Предположим, я хочу добавить пользовательский атрибут, который разрешает доступ только определенным пользователям:
Случай №1
Я видел такой подход переопределения OnAuthorization, который устанавливает ответ, если что-то не так.
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
 public override void OnAuthorization(HttpActionContext actionContext)
  {
   if ( /*check if user OK or not*/)
   {
     actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
   }
  }
}
Случай №2
Но я также видел этот похожий пример, который также переопределяет OnAuthorization, но с вызовом base:
public override void OnAuthorization(HttpActionContext actionContext) 
{ 
  base.OnAuthorization(actionContext);
    // If not authorized at all, don't bother
    if (actionContext.Response == null)  
     {
      //...
     }
}
Затем вы проверяете,
HttpActionContext.Response установлен или нет. Если он не установлен, это означает, что запрос авторизирован и пользователь в порядке
Случай №3
Но я также видел такой подход переопределения IsAuthorized:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
 protected override bool IsAuthorized(HttpActionContext context)
  {
   if ( /*check if user OK or not*/)
   {
    return true;// or false
   }
  }
}
Дело № 4
И затем я увидел аналогичный пример один, но с вызовом base.IsAuthorized(context):
protected override bool IsAuthorized(HttpActionContext context)
{
 if (something1 && something2 && base.IsAuthorized(context)) //??
 return true;
 return false;
}
Еще одна вещь
И наконец, Доминик сказал здесь:
Вы не должны переопределять OnAuthorization - потому что вам будет отсутствовать обработка [AllowAnonymous].
Вопросы
-  
1) Какие методы следует использовать:
IsAuthorizedилиOnAuthorization? (или когда использовать) -  
2), когда я должен называть
base.IsAuthorized orbase.OnAuthorization`? -  
3) Это как они его построили? что если ответ равен нулю, то все в порядке? (случай № 2)
 
Н.Б.
Обратите внимание: я использую (и хочу использовать) только AuthorizeAttribute, который уже наследует от AuthorizationFilterAttribute
Почему?
Becuase Я нахожусь на первом этапе: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
 
В любом случае, я спрашиваю через расширение атрибута Authorize.