redirectfromloginpage net formsauthentication form ejemplo autenticacion asp forms-authentication

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-->