Sto leggendo da diverse risorse (libri e risposte SO) sull'autorizzazione in WebApi.
Supponiamo di voler aggiungere un attributo personalizzato che consente l'accesso solo a determinati utenti:
Caso 1
Ho visto questo approccio di override OnAuthorization
, che imposta la risposta se qualcosa non va
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Caso n. 2
Ma ho anche visto questo esempio simile che ha anche la precedenza OnAuthorization
ma con la chiamata a base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Quindi, controlli se
HttpActionContext.Response
è impostato o meno. Se non è impostato, significa che la richiesta è autorizzata e l'utente è ok
Caso n. 3
Ma ho anche visto questo approccio di override IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
Caso n. 4
E poi ho visto un esempio simile ma con la chiamata di base.IsAuthorized (context):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
Un'altra cosa
E infine Dominick ha detto qui :
Non dovresti sovrascrivere OnAuthorization - perché mancherebbe la gestione di [AllowAnonymous].
Domande
1) Quali metodi dovrei usare:
IsAuthorized
oOnAuthorization
? (o quando usare quale)2) quando devo chiamare
base.IsAuthorized or
base.OnAuthorization`?3) È così che l'hanno costruito? che se la risposta è nulla allora va tutto bene? (caso # 2)
NB
Si prega di notare, sto usando (e voglio usare) solo quello AuthorizeAttribute
che già eredita da AuthorizationFilterAttribute
Perché ?
Perché sono al primo stadio in: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Comunque sto chiedendo tramite l'estensione dell'attributo Authorize.