2011-01-04 16 views
1

Ich habe eine ältere ASP.Net-Website, in die ich MVC integriere. Ich benutze webforms Authentifizierung mit dem Standard-Berechtigungs Tag in web.config:Erlaube öffentlichen Zugriff auf Controller-Aktion in WebForms + MVC-Site

<authorization> 
    <deny users="?"/> 
</authorization> 

Ich habe in der Lage zu verschiedenen Ordnern Öffentlichkeit in der Vergangenheit unter Verwendung von Standorten, wie zB:

<location path="Public"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 

Mit dem zusätzlichen von MVC und ein paar Controller muss ich ein paar Controller-Aktionen vollständig öffentlich machen. Ich kann dies jedoch nicht mit dem Standort-Tag in web.config tun. Wenn ich versuche, zur URL einer Aktion zu gehen, obwohl sie nicht authentifiziert ist, leitet ASP.Net mich zurück zu meiner Anmeldeseite (angegeben in web.config). Ich verwende kein Autorisierungsattribut für eine dieser Controlleraktionen.

Wie öffne ich den Zugang zu diesen innerhalb der Sicherheit für alle Webforms, die Schutz benötigen?

Edit:

ich klar, dass ich machen möchte bin mit [autorisieren] auf Aktionen möchte ich geschützt. Die Aktionen in Fragen, die ich öffentlich gemacht werden sollen, sind nicht mit dem [autorisieren] Attribut und sind noch nicht zugänglich, es sei denn angemeldet

bearbeiten. 2:

Ich habe einige IIS Spuren getan und denke, dass ich davon überzeugt, ich selbst, dass dies in der Tat Authentifizierung fehlschlägt, nicht ein anderer Fehler. Hier ist ein Beispiel für einen Standort und Route ich Zugang versuche:

<location path="WC"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

Und der Route:

routes.MapRoute(
      "WC", // Route name 
      "WC/{id}", 
      new { action = "GetWC", controller = "WC" } // URL with parameters 
     ); 

und die URL, die fehlschlägt:

http://localhost/MyWebApp/WC/42 

ich eigentlich haben eine allgemeinere Route, die dies behandelt, aber hinzugefügt, um jeden Zweifel zu beseitigen. In jedem Fall funktioniert das gut mit eingeloggt.

+0

Können Sie ein Beispiel für die Standortelemente und Routen angeben, die Sie versuchen? Ein Missverhältnis zwischen den beiden scheint die wahrscheinlichste Ursache zu sein. –

Antwort

0

Ich denke, Sie könnten ein ActionFilterAttribute verwenden, um bestimmte Methoden zu dekorieren, wie Authentifizierung erfordern, während Controller selbst möglicherweise öffentlich sichtbar sein.

0

Verwenden Sie die System.Web.Mvc.AuthorizeAttribute. Sie können damit entweder die Controller-Klasse selbst dekorieren (wodurch alle Aktionsmethoden geschützt werden) oder Sie können die Action-Methode selbst für eine feinere Kornkontrolle dekorieren.

Wenn beide nicht dekoriert sind, dann können sie von allen Benutzern (einschließlich anonym) aufgerufen werden. Wenn Sie einfach [Authorize] verwenden, können nur autorisierte Benutzer die Aktionsmethode aufrufen. Sie können auch eine durch Kommas getrennte Liste von Rollen übergeben, um eine Liste anzugeben, aus der der Benutzer mindestens eine der Rollen haben muss, um die Aktionsmethode aufzurufen.

+0

Das ist im Grunde, was ich getan habe, und es funktioniert nicht. –

+0

Dann gibt es noch etwas anderes, das Ihr Problem verursacht. Standardmäßig sind Aktionen öffentlich. Erst wenn Sie es (oder seine Klasse) mit Authorize versehen, werden sie geschützt. Möglicherweise müssen Sie verschiedene Abschnitte Ihrer web.config veröffentlichen, damit wir Ihnen eine Antwort geben können (das Authentifizierungselement, eventuell vorhandene Autorisierungselemente). –

+0

Nachdem ich den ganzen Tag recherchiert habe, habe ich widersprüchliche Aussagen gefunden. Von dem, was ich verstehe, OOB eine MVC-Site ist weit offen, aber eine WebForms-Website ist nicht. Der Unterschied scheint die Autorisierungskonfiguration in web.config zu sein. Ich bin völlig verwirrt darüber, da so viele Leute Dinge sagen, die sich widersprechen, einschließlich MVPs in den MS-Foren. –

Verwandte Themen