Estoy leyendo varios recursos (libros y respuestas SO) sobre la autorización en WebApi.
Supongamos que quiero agregar un atributo personalizado que permite el acceso solo para ciertos usuarios:
Caso 1
He visto este enfoque de anulación OnAuthorization
, que establece la respuesta si algo está mal
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Caso # 2
Pero también he visto este ejemplo similar que también anula OnAuthorization
pero con llamadas a base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Luego, verifica si
HttpActionContext.Response
está configurado o no. Si no está configurado, significa que la solicitud está autorizada y el usuario está bien
Caso # 3
Pero también he visto este enfoque de anular IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
Caso # 4
Y luego vi un ejemplo similar pero con una llamada base.IsAuthorized (context):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
Una cosa más
Y finalmente Dominick dijo aquí :
No debe anular OnAuthorization, ya que se estaría perdiendo el control de [AllowAnonymous].
Preguntas
1) ¿Qué métodos debo utilizar:
IsAuthorized
oOnAuthorization
? (o cuándo usar cuál)2) ¿Cuándo debo llamar a
base.IsAuthorized or
base.OnAuthorization`?3) ¿Así es como lo construyeron? que si la respuesta es nula entonces todo esta bien? (caso # 2)
nótese bien
Tenga en cuenta que estoy usando (y quiero usar) solo lo AuthorizeAttribute
que ya hereda de AuthorizationFilterAttribute
Por qué ?
Porque estoy en la primera etapa en: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
De todos modos, estoy preguntando mediante la ampliación del atributo Authorize.