ASP.NET Membership + Location Paths

Quando recorremos ao Membership para implementarmos a segurança da nossa aplicação, um dos problemas que podemos ter é quando definimos que determinada pasta será acedida apenas por utilizadores previamente autenticados e nela contemos ficheiros que usamos noutras páginas que não precisam desta mesma autenticação para serem acedidas, como ficheiros de estilos (CSS), imagens, etc.

Se tivermos por exemplo a seguinte estrutura:

/ (root)

/Imagens

/Imagens/usericon.png

/Estilos

/Estilos/estilos.css

/Login.aspx

/MinhaPaginaProtegida.aspx

/OutraPaginaProtegida.aspx

E no web.config definirmos que, para aceder a qualquer página  na aplicação temos que estar autenticados, 

«span style=”font-size:x-small;color:#a31515;”>authorization</span>>
«/span>deny users=* />
</
authorization>

se usarmos o ficheiro de estilos ( /Estilos/estilos.css ) na nossa página de login, ao ser carregada no browser irá aparecer sem qualquer personalização feita. Isto porque na página Login.aspx teremos algo do tipo

«span style=”font-size:x-small;color:#a31515;”>link</span> type=”text/css” rel=”Stylesheet” href=”Estilos/estilos.css” />

e como este ficheiro está numa pasta dentro da zona protegida, o browser não vai conseguir carregar os estilos definidos na página.

Para podermos contornar isso temos que indicar no web.config que o ficheiro poderá ser acedido mesmo não sendo feita a autenticação na aplicação. Para isso usamos o elemento </a> e no atributo path indicamos onde está o ficheiro. Por fim, indicamos que todos os utilizadores (incluindo os anónimos) poderão aceder a ele, fazendo assim com que a nossa página de login consiga ir buscar os estilos a serem carregados.

<location path=estilos.css>
<
system.web>
<
authorization>
<
allow users=*/>
</
authorization>
</
system.web>
</
location>