9

Tengo una aplicación ASP.Net MVC que usa Integrated Security que necesito para poder otorgar acceso abierto a una ruta específica. La ruta en cuestión es ~/Agreements/Upload. He intentado algunas cosas y nada ha funcionado hasta ahora.¿Cómo permito a todos los usuarios acceder a una ruta dentro de un sitio web con autenticación integrada?

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

En IIS en el directorio de seguridad> Métodos de autenticación que sólo tienen "autenticación integrada de Windows" seleccionado. Ahora, esto podría ser parte de mi problema (ya que aunque IIS permite que el IIS anterior no lo haga). Pero si ese es el caso, ¿cómo lo configuro para que la seguridad integrada funcione, pero permite que las personas que no están autenticadas accedan a la ruta determinada?

+2

PELIGRO, No puede asegurar su aplicación MVC de esta manera. Consulte 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 está en una justa cruzada. Leí su blog y estoy convencido de que tiene razón. – MrBoJangles

Respuesta

-1

necesita permitir el acceso anónimo en IIS, así, de lo contrario sólo ventanas usuarios autenticados podrán acceder a cualquier lugar de su sitio. Debe denegar el acceso por defecto a los usuarios anónimos.

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

En su sección <location>, permiten a los usuarios anónimos.

<allow users="?"/> 
+0

Cuando permito permitir el acceso anónimo en IIS, parece que pierdo la capacidad de extraer el nombre de usuario de las personas que usan la seguridad integrada de Windows ... –

+0

Ah ... el truco está de acuerdo con http://msdn.microsoft.com /en-us/library/wce3kxhd.aspx (Autorización de ASP.NET) - "Las reglas contenidas en los archivos de configuración de nivel de aplicación tienen prioridad sobre las reglas heredadas" –

+2

Esta respuesta no solo es incorrecta, es peligrosa, como lo señala un comentario en la pregunta. – Andy

16

En ASP.NET MVC no debe usar el elemento de ubicación en el archivo web.config. Mientras que el motor de formularios web se asigna a los archivos físicos en el disco, el motor MVC usa el enrutamiento. Esto significa que podría permitir el acceso a un "controlador protegido" inadvertidamente a través de una ruta personalizada por accidente.

La forma recomendada de asegurar las aplicaciones ASP.NET MVC es a través del uso del atributo Autorizar, como se ve en el siguiente ejemplo:

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

La acción del controlador es lo que se quiere proteger y no la ruta . La DBO ASP.NET MVC Seguridad, Levi Broderick es bastante vocales sobre este tema:

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

Para la versión MVC 4 ver 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 Gracias por esa actualización. El artículo es interesante. Implementamos algo muy similar en MVC3 para resolver el controlador de acceso anónimo y/o la acción del controlador. – Junto

Cuestiones relacionadas