Sto leggendo da diverse risorse (libri e risposte SO) sull'autorizzazione in WebApi.Autorizzazione personalizzata in Asp.net WebApi - che casino?
Supponiamo che io voglio aggiungere attributi personalizzati che consente l'accesso solo per determinati utenti:
Caso # 1
Ho visto questo approccio di sovrascrivendoOnAuthorization
, che definisce la risposta se qualcosa è sbagliato
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
Ma ho anche visto questo esempio simile che anche l'override OnAuthorization
ma con chiamava base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Poi, si controlla se il HttpActionContext.Response
è impostato o meno. Se non è impostata, vuol dire che la richiesta è autorizzata e l'utente è ok
Caso # 3
Ma ho visto anche questo approccio di rilevante IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if (/*check if user OK or not*/)
{
return true;// or false
}
}
}
Case # 4
E poi ho visto un esempio simile ma con la chiamata di base. Isautorizzato (contesto):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
Una cosa più
E infine Dominick detto here:
Non si dovrebbe ignorare OnAuthorization - perché si sarebbe perdere [AllowAnonymous] manipolazione.
Domande
1) Quali metodi devo usare:
IsAuthorized
oOnAuthorization
? (o quando usare quale)2) quando devo chiamare
base.IsAuthorized or
base.OnAutorizzazione?3) È così che l'hanno costruito? che se la risposta è nulla allora tutto è ok?(Caso # 2)
NB
Si prega di notare, sto usando (e si desidera utilizzare) solo AuthorizeAttribute
che eredita già da AuthorizationFilterAttribute
Perché?
Becuase io sono nella prima fase in: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Comunque Im chiedendo tramite l'estensione attributo Autorizza.
Che cosa è necessario per sostituire l'attributo Authorize? Qual è l'usecase che vuoi raggiungere? Se è necessario consentire l'accesso a determinati utenti perché non utilizzare l'attributo [Autorizza (Utenti = "Amministratore")] in questo modo? –
@TaiseerJoudeh Ad esempio, provare ad autenticare gli utenti tra le 10:00 e le 12:00 (configurabili). non puoi farlo con ruoli normali e attr. devi fare la tua logica –