Restringindo Arquivos – FormsAuthentication


Hoje estive que disponibilizar em um área restrita da empresa que trabalho um arquivo PDF para que os usuários que tem acesso a esta área do website possam baixá-lo. Criei um subdiretório dentro da pasta que está restringinda no arquivo Web.Config. Até aí estava tudo certo, até quando tentei chamar o arquivo PDF diretamente na URL do browser.

Imaginava eu, que pelo fato de estar dentro do diretório que é restrito o mesmo também seria e me enganei. Antes de ir mais além, eu criei uma classe/handler onde a mesma implementava a interface IHttpHandler e ali verificava se o usuário estava ou não autenticado. Em seguida fiz as entradas no arquivo Web.Config incluindo os elementos de httpHandlers, mapeando assim o arquivo PDF.

Da mesma forma o problema ainda persistia e eu continuava sem entender. Dando uma palavra com o meu amigo João, ele me deu uma luz, onde disse que como arquivos com extensões *.pdf não passam pelo ASP.NET, ou melhor, não estão mapeados dentro do IIS, logo, não seria possível validar a autenticação antes de exibir o arquivo ao usuário.

Resumindo, o que tive que fazer foi apenas fazer o mapping para arquivos PDF dentro do IIS para que o filtro ISAPI (aspnet_isapi.dll) passe a fazer as verificações dos mesmos antes de exibí-los. Como associamos o ASP.NET à arquivos PDFs, isso já é o necessário. Não é mais necessário a criação de um Handler específico e fazer as entradas de mappings dentro do arquivo Web.Config, que como já disse acima, se não estiver associado ao ASP.NET, não irá adiantar nada. Se lermos a documentação temos:

Please note that Microsoft Internet Information Services (IIS) has its own concept of mapping extensions to ISAPIs. For the settings for a given extension in this section to take effect, the extension must be mapped in IIS to ASP.NET ISAPI. For nonstandard extensions (something other than .aspx, .asmx, .asax, and so on), the user must configure IIS.

Pois bem, abaixo a imagem ilustra como fazermos para criar uma nova entrada (mapping) dentro do IIS para que o ASP.NET passe também a gerí-los:

Para chegar até esta tela, clique com o botão direito em cima do site dentro do IIS, vá até Propriedades, depois em Home Directory, em seguida em Configuration e finalmente clique em Add para fazer um novo mapping. Este processo deve ser igual para todos os arquivos que desejar fazer o mesmo.

Anúncios

2 comentários sobre “Restringindo Arquivos – FormsAuthentication

    • Boas Wualace,

      Talvez você poderia colocá-los dentro de um diretório protegido, como é o caso da AppData.

      Ou ainda, utilizar o handler HttpForbiddenHandler, negando o acesso à uma extensão que queira proteger, por exemplo:

      <httpHandlers>
      <add verb="*" path="*.pdf" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
      </httpHandlers>

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s