2012-06-01 21 views
45

Ich habe eine harte Zeit zu verstehen, echte Verwendung von [Authorize] Attribut in ASP.NET MVC. Nach dem Konzept, wenn wir eine Controller-Methode mit [Authorize] Attribut schmücken, dürfen nur authentifizierte Benutzer auf die Controller zugreifen.Autorisieren Attribut in ASP.NET MVC

Ich habe eine ASP.NET MVC-Anwendung ohne Deko-Controller mit [Authorize] Attribut entwickelt. Was ich beobachtet habe, ist, wenn ich den Authentifizierungsmechanismus in meiner Anwendung mit web.config oder auf andere Weise richtig implementiere, kann ich jetzt auf die URL {controller}/{action}/{id} einer bestimmten Aktionsmethode zugreifen.

System immer nach Login fragen. Das bedeutet, dass meine Controller gesichert sind. Meine Frage ist dies, wenn ich meine Controller ohne Verwendung von [Authorize] Attribut sichern kann, was ist das wirkliche Bedürfnis danach?

Antwort

75

Wirkliche Macht kommt mit Verständnis und Implementierung Mitgliedschaft Provider zusammen mit Rollenanbieter. Sie können Benutzern Rollen zuweisen, und entsprechend dieser Einschränkung können Sie verschiedene Zugriffsrollen für verschiedene Benutzer- oder Controller-Aktionen oder Controller selbst anwenden.

[Authorize(Users = "Betty, Johnny")] 
public ActionResult SpecificUserOnly() 
{ 
    return View(); 
} 

oder Sie können nach Gruppe beschränken

[Authorize(Roles = "Admin, Super User")] 
public ActionResult AdministratorsOnly() 
{ 
    return View(); 
} 
+1

Danke für die answer.But die gleiche Einschränkung, kann ich verhängen meine web.config mit Verwendung von Mitgliedschaft und Rollenanbieter für die Ansichtsseiten, die durch die Controller zurückgegeben werden. Ich brauche das Attribut [Authosrize] dafür nicht zu verwenden. – techmad

+7

@kaus - Eine Sache, die darauf hinweist, ist, dass die Verwendung einer web.config in einer MVC-App das Potenzial für Sicherheitslücken hat. Das authorize-Attribut berücksichtigt das gesamte ASP.NET-Routing, während Sie mit web.config alle möglichen Routing-Konfigurationen in der App kennen und berücksichtigen müssen. Möglicherweise haben Sie alles berücksichtigt, aber Sie können nicht sicher sein, indem Sie auf web.config und routing.config schauen und wo auch immer Sie hinschauen. Wenn Sie sich die Autorize-Attribute einer Klasse ansehen, wissen Sie, dass sie unabhängig vom Routing sicher ist. – DarrellNorton

9

Es existiert, weil es bequemer ist, verwenden sie auch eine ganz andere Ideologie Attribute mit den Autorisierungsparameter zu markieren, anstatt XML-Konfiguration. Es war nicht dazu gedacht, allgemeine Konfigurationen oder andere Autorisierungs-Frameworks zu überlisten, nur MVCs Art, dies zu tun. Ich sage das, weil es scheint, dass Sie nach einer technischen Eigenschaft suchen, die Vorteile wahrscheinlich nicht ... einfach großartige Bequemlichkeit sind.

BobRock bereits die Vorteile aufgelistet. Um nur zu seiner Antwort hinzuzufügen, sind andere Szenarien, dass Sie dieses Attribut auf den gesamten Controller anwenden können, nicht nur auf Aktionen. Sie können auch verschiedenen Rollenautorisierungsparametern verschiedene Aktionen in demselben Controller hinzufügen, um sie zu mischen und anzupassen.

8

Verwenden Authorize Attribut scheint bequemer und fühlt sich mehr "MVC Weg". Bezüglich technischer Vorteile gibt es einige.

Ein Szenario, das mir in den Sinn kommt, ist, wenn Sie Ausgabe-Caching in Ihrer App verwenden. Autorize-Attribut behandelt das gut.

Eine andere wäre Erweiterbarkeit. Das Attribut Authorize ist nur ein einfacher Out-of-the-Box-Filter, aber Sie können seine Methoden überschreiben und einige Aktionen wie die Protokollierung usw. vorautorisieren. Ich bin mir nicht sicher, wie Sie das durch die Konfiguration tun würden.

+1

+1 für die Erwähnung der Erweiterbarkeit. Das ist ein klarer Vorteil gegenüber der web.config-Methode. ;) – CptRobby

4

Ein Vorteil besteht darin, dass Sie den Zugriff auf die Anwendung kompilieren, sodass er nicht versehentlich von jemandem geändert werden kann, der die Datei Web.config ändert.

Dies ist möglicherweise kein Vorteil für Sie und könnte ein Nachteil sein. Aber für einige Arten des Zugangs mag es vorzuziehen sein.

Plus, ich finde, dass Autorisierungsinformationen in der Web.config verschmutzt es, und macht es schwieriger zu finden, Dinge. In mancherlei Hinsicht ist es so, in anderen gibt es keinen anderen Weg, es zu tun.

Verwandte Themen