2015-02-23 2 views
5

In ASP.Net Web API 2 (Owin), was ist der Unterschied zwischen IAuthenticationFilter und AuthorizeAttribute?Unterschied zwischen AuthorizeAttribute und IAuthenticationFilter

Zur Zeit habe ich meine Genehmigung umgesetzt durch meine eigene AuthorizeAttribute wie folgt zu schaffen:

public class IntegratedAuthorization : AuthorizeAttribute 
{ 
    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     bool returnValue = false; 

     if (actionContext.Request.Headers.Authorization != null) 
     { 
      if (actionContext.Request.Headers.Authorization.Scheme != null) 
      { 
       if (actionContext.Request.Headers.Authorization.Scheme.ToLower() == "basic") 
       { 
        if (actionContext.Request.Headers.Authorization.Parameter != null) 
        { 
         // .... 
         // .... 
         // .... 
        } 
       } 
      } 
     } 

     return returnValue; 
    } 
} 

als ich es meinem HttpConfiguration wie diese hinzugefügt haben:

config.Filters.Add(new IntegratedAuthorization()); 

Alles funktioniert gut, aber wenn ich im Internet gesucht, fand ich viele Entwickler, die IAuthenticationFilter verwenden, wie in diesem Tutorial: Authentication Filters in ASP.NET Web API 2.

Nun die eigentliche Frage, was ist der Unterschied zwischen diesen beiden Methoden? Was soll ich verwenden?

Vielen Dank!

+0

Bitte entfernen Sie die Antwort von NightOwl888 als beste Antwort. Es erwähnt nicht "IAuthenticationFilter" und beantwortet Ihre Frage nicht. – xr280xr

Antwort

3

AuthorizeAttribute ist die zu implementierende Klasse für die Autorisierung einer Anwendung. Sie folgen dem richtigen Ansatz.

IAuthorizationFilter ist eine verallgemeinerte Schnittstelle, die von vielen Filtern implementiert wird, die jedoch nicht unbedingt alle eine Autorisierung bereitstellen. Während MVC kümmert sich nicht viel auf die eine oder andere Weise, können die 3rd-Party-Bibliotheken die Autorisierungskomponente in der Anwendung identifizieren und damit in die Sicherheit der Anwendung stecken, um zu überprüfen, ob es AuthorizeAttribute erbt. Die Quintessenz ist, dass, wenn Ihre Autorisierungskomponente nicht AuthorizeAttribute erbt, einige Bibliotheken von Drittanbietern in Ihrer Anwendung möglicherweise nicht richtig funktionieren.

Seit AuthorizeAttribute implementiert IAuthorizationFilter, haben Sie immer noch Zugriff auf alle seine Funktionen, einschließlich der OnAuthorization Methode, die Farhad erwähnt.

Der einzige Nachteil ist, dass Microsoft angenommen hat, dass jede Anwendung auf Benutzern und Rollen basieren würde, indem sie diese Eigenschaften von AuthorizeAttribute machen. Wenn Sie also eine Anwendung haben, die dies nicht ist, müssen Sie diese Eigenschaften möglicherweise in Ihrer Implementierung ausblenden.

[Obsolete("Not applicable in this class.")] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
new public string Roles { get; set; } 

[Obsolete("Not applicable in this class.")] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
new public string Users { get; set; } 

Eine zusätzliche Einschränkung für dritte Parteien erforderlich ist, in der Anwendungssicherheit zu stecken - wenn Sie OnAuthorization außer Kraft setzen (beachten Sie, dass Sie nicht zu tun haben), ist es wichtig, dass eine erfolgreiche Zulassung Rückkehr null für die actionContext.Response Eigenschaft und Bei einer fehlgeschlagenen Autorisierung muss sie auf einen Wert ungleich null festgelegt werden (ein Handler, der basierend auf dem Fehler Maßnahmen ergreift). Auf diese Weise funktioniert die Standardimplementierung, und Sie sollten demselben Muster folgen, wenn Sie es anpassen müssen.

+0

Vielen Dank für Ihre ausführliche Antwort. Also ich folge dem richtigen Weg :) – BendEg

+2

Es ist vielleicht erwähnenswert, dass IAuthenticationFilter (wie im Q erwähnt) und IAuthorizationFilter sind zwei verschiedene Dinge. – mcintyre321

+0

Wie von @ mcintyre321 erwähnt, beantwortet dies eine andere Frage. –