Ich lese aus verschiedenen Quellen (Bücher und SO-Antworten) über die Autorisierung in WebApi.
Angenommen, ich möchte ein benutzerdefiniertes Attribut hinzufügen, das den Zugriff nur für bestimmte Benutzer ermöglicht:
Fall 1
Ich habe diesen Ansatz des Überschreibens gesehen OnAuthorization
, der die Reaktion festlegt, wenn etwas nicht stimmt
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Fall 2
Aber ich habe auch dieses ähnliche Beispiel gesehen, das ebenfalls OnAuthorization
außer Kraft gesetzt wurde, aber mit dem Aufruf an base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Dann prüfen Sie, ob das
HttpActionContext.Response
eingestellt ist oder nicht. Wenn es nicht festgelegt ist, bedeutet dies, dass die Anforderung autorisiert ist und der Benutzer in Ordnung ist
Fall 3
Aber ich habe auch diesen Ansatz des Überschreibens gesehen IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
Fall 4
Und dann habe ich ein ähnliches Beispiel gesehen, aber mit dem Aufruf von base.IsAuthorized (Kontext):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
Eine Sache noch
Und schließlich sagte Dominick hier :
Sie sollten OnAuthorization nicht überschreiben, da Ihnen die Behandlung mit [AllowAnonymous] fehlen würde.
Fragen
1) Welche Methoden soll ich anwenden:
IsAuthorized
oderOnAuthorization
? (oder wann man welche benutzt)2) Wann soll ich
base.IsAuthorized or
base.OnAuthorization anrufen?3) Haben sie es so gebaut? dass, wenn die Antwort null ist, dann ist alles in Ordnung? (Fall 2)
NB
Bitte beachten Sie, dass ich nur AuthorizeAttribute
das verwende (und verwenden möchte), von dem bereits geerbt wurde AuthorizationFilterAttribute
Warum ?
Weil ich mich in der ersten Phase befinde in: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Wie auch immer, ich frage über die Erweiterung des Authorize-Attributs.