9

Ich habe eine ASP.Net MVC App, die integrierte Sicherheit verwendet, die ich in der Lage sein muss, offenen Zugriff auf eine bestimmte Route zu gewähren. Die fragliche Route ist ~/Agreements/Upload. Ich habe ein paar Dinge ausprobiert und nichts hat bisher funktioniert.Wie erlaube ich allen Benutzern den Zugriff auf eine Route innerhalb einer Website mit integrierter Authentifizierung?

<configuration> 
    <location path="~/Agreements/Upload"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

In IIS unter Verzeichnissicherheit> Authentifizierungsmethoden habe ich nur "Integrierte Windows-Authentifizierung" ausgewählt. Nun, dies könnte Teil meines Problems sein (wie auch wenn IIS den obigen IIS nicht erlaubt). Aber wenn das der Fall ist, wie konfiguriere ich es so, dass Integrated Security funktioniert, aber erlaubt es Leuten, die nicht authentifiziert sind, auf die gegebene Route zuzugreifen?

+2

GEFAHR, Sie können Ihre MVC App auf diese Weise nicht sichern. Siehe http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute.aspx – RickAndMSFT

+0

@ RickAndMSFT ist auf einem rechtschaffenen Kreuzzug. Ich lese seinen Blog und ich bin auf die Idee verkauft, dass er recht hat. – MrBoJangles

Antwort

-1

Sie müssen auch den anonymen Zugriff in IIS zulassen, da sonst nur Windows-authentifizierte Benutzer auf Ihre Website zugreifen können. Sie sollten den Zugriff auf anonyme Benutzer standardmäßig verweigern.

<deny users="?"/> 
<allow users="*"/> 

In Ihrer <location> Abschnitt erlauben anonyme Benutzer.

<allow users="?"/> 
+0

Wenn ich erlauben anonymen Zugriff in IIS zu erlauben, scheint ich die Fähigkeit zu verlieren, den Benutzernamen der Leute mit Windows integrierten Sicherheit ... –

+0

Ah .. das knifflige Bit ist nach http://msdn.microsoft.com /de-de/library/wce3kxhd.aspx (ASP.NET-Autorisierung) - "Regeln, die in Konfigurationsdateien auf Anwendungsebene enthalten sind, haben Vorrang vor geerbten Regeln" –

+2

Diese Antwort ist nicht nur falsch, sondern auch gefährlich, wie in einem Kommentar darauf hingewiesen wurde die Frage. – Andy

16

In ASP.NET MVC sollten Sie nicht das Standortelement in der web.config verwenden. Während die Webformular-Engine physischen Dateien auf der Festplatte zugeordnet ist, verwendet die MVC-Engine Routing. Dies bedeutet, dass Sie versehentlich versehentlich den Zugriff auf einen "geschützten Controller" über eine benutzerdefinierte Route zulassen könnten.

Die empfohlene Methode, ASP.NET MVC-Anwendungen zu sichern, ist die Verwendung des Autorisieren Attribut, wie im Beispiel unten zu sehen:

public class HomeController : Controller 
{ 
    [Authorize] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

Die Controller-Aktion ist das, was Sie wollen, dass die Route zu schützen und nicht . Die ASP.NET MVC Sicherheit bod, ist Levi Broderick eher vocal zu diesem Problem:

  1. Excluding an action from authorization in ASP.NET MVC 2
  2. Problem with Authorization with IIS and MVC.
+2

Für die MVC 4-Version siehe http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous -attribute.aspx – RickAndMSFT

+0

@ Rick.anderson-at-Microsoft.com Danke für dieses Update. Der Artikel ist interessant. Wir haben etwas sehr ähnliches in MVC3 implementiert, um die anonyme Zugriffssteuerung und/oder Controller-Aktion zu lösen. – Junto

Verwandte Themen