Je lis plusieurs ressources (livres et réponses SO) sur l'autorisation dans WebApi.
Supposons que je souhaite ajouter un attribut personnalisé qui autorise l'accès uniquement à certains utilisateurs:
Cas 1
J'ai vu cette approche de remplacement OnAuthorization
, qui définit la réponse si quelque chose ne va pas
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Cas n ° 2
Mais j'ai également vu cet exemple similaire qui remplace également OnAuthorization
mais avec l'appel à base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Ensuite, vous vérifiez si le
HttpActionContext.Response
est défini ou non. S'il n'est pas défini, cela signifie que la demande est autorisée et que l'utilisateur est ok
Cas n ° 3
Mais j'ai également vu cette approche consistant à remplacer IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
Cas n ° 4
Et puis j'ai vu un exemple similaire mais avec appel de base.IsAuthorized (context):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
Encore une chose
Et finalement Dominick a dit ici :
Vous ne devez pas remplacer OnAuthorization - car il vous manquerait la gestion [AllowAnonymous].
Des questions
1) Quelles méthodes dois-je utiliser:
IsAuthorized
ouOnAuthorization
? (ou quand utiliser lequel)2) Quand dois-je appeler
base.IsAuthorized or
base.OnAuthorization`?3) Est-ce ainsi qu'ils l'ont construit? que si la réponse est nulle alors tout va bien? (cas n ° 2)
NB
Veuillez noter que j'utilise (et que je souhaite utiliser) uniquement AuthorizeAttribute
ce qui hérite déjà de AuthorizationFilterAttribute
Pourquoi ?
Parce que je suis à la première étape de: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Quoi qu'il en soit, je demande via l'extension de l'attribut Authorize.