forms authentication - net - ¿Cómo concedo acceso anónimo a una url usando FormsAuthentication?
web config authentication (1)
En su mayor parte, mi aplicación web requiere autenticación para hacer cualquier cosa. Hay algunas páginas, a saber, la página de inicio, a las que me gustaría que las personas puedan acceder sin autenticación.
Específicamente, me gustaría permitir el acceso anónimo a estas URL:
/home
/default.aspx
Estoy usando asp.net MVC y FormsAuthentication. Ambas direcciones apuntan a la misma vista:
/home/index.aspx
Aquí está mi configuración actual en web.config.
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Al leer la documentación de la etiqueta de autorización, dice "Configura la autorización para una aplicación web, controlando el acceso del cliente a los recursos de URL". Parece que debería poder usar la etiqueta de autorización para especificar una URL y permitir el acceso.
Algo como:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<authorization url="/default.aspx">
<allow users="?" />
</authorization>
<authorization url="/home">
<allow users="?" />
</authorization>
Odio responder a mi propia pregunta, pero como terminé de entenderlo, creo que compartiría el conocimiento.
Use la etiqueta de ubicación y coloque las etiquetas permitir y denegar en el orden correcto.
La etiqueta de ubicación se puede utilizar para configurar un recurso url específico. En mi caso quise configurar algunas URL y carpetas específicamente.
Esto no funcionó al principio porque no tenía el permiso / denegación en el orden correcto. Según MSDN, "el módulo de autorización otorga o niega el acceso a un recurso de URL en función de si la primera regla de acceso encontrada es una regla de permiso o de denegación".
En mi caso, necesitaba poner primero todas mis cosas públicas (default.aspx, inicio, estilos, imágenes, scripts) y luego poner un rechazo en todo lo demás. Dejé el camino en la última etiqueta de ubicación. Eso hace que se aplique a todos los archivos y subcarpetas.
Resultado final, un usuario puede acceder a la página de inicio, extraer imágenes y estilos, pero para todo lo demás debe iniciar sesión.
Aquí está mi archivo de configuración web ahora:
<!--AUTHORIZATION AND AUTHENTICATION RULES-->
<location path="default.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="Home">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="Styles">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="Scripts">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="images">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location allowOverride="true">
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
<!--END AUTHORIZATION AND AUTHENTICATION RULES-->