Un HttpHandler per la FormsAuthentication sui file con la stessa estensione

di Daniele Bochicchio, in ASP.NET, HttpHandler, C#,

Il motore di ASP.NET, di default, è in grado di intercettare le richieste solo per le estensioni che gestisce direttamente.
Se si ha bisogno di proteggere con la FormsAuthentication file ZIP o PDF, ad esempio, il meccanismo non entra in azione.
Per ovviare a questo problema è però sufficiente mappare, da IIS, l'estensione desiderata sul motore di ASP.NET (per farlo è sufficiente replicare la configurazione per l'estensione .aspx).

Una volta fatta la modifica, è sufficiente modificare il web.config in modo che vengano definite le policy di accesso alle risorse.
Se i file sono tutti in una directory, il compito è molto più semplice.
Qualora invece si tratti di file sparsi per il disco del server, che hanno in comune l'estensione, il tag location non può esserci utile ed è quindi indispensabile optare per qualcosa di diverso.
In questo caso, la soluzione migliore consiste nell'implmentare un semplice HttpHandler che verifichi, per tutti i file, se la richiesta è autenticata o meno:

using System;
using System.Web; 

namespace ASPItalia.com.Handlers
{ 
  // handler per un'intera estensione
  public class ProtectedContentHandler : IHttpHandler 
  {
    // processa la richiesta corrente
    public void ProcessRequest(HttpContext ctx) 
    { 
      HttpResponse Response = ctx.Response; 
      HttpRequest Request = ctx.Request; 

      // se non è autenticato, rimando alla pagina di login
      if (!Request.IsAuthenticated)
      {
        Response.StatusCode = 401;
        Response.End();
      }

      // il contenuto arriva al browser
      Response.Clear(); 
      Response.ContentType = "application/x-zip-compressed"; 
      Response.WriteFile(Request.Path);
    }

    public bool IsReusable 
    { 
      get 
      { 
        return true;
      }
    }
    
  }
}

Nel web.config, andrà poi aggiunto, sotto configuration\system.web, la stessa voce per ogni estensione da gestire:

<httpHandlers>
  <add verb="*" path="*.zip" type="ASPItalia.com.Handlers.ProtectedContentHandler,handlers" />
  <add verb="*" path="*.pdf" type="ASPItalia.com.Handlers.ProtectedContentHandler,handlers" />
</httpHandlers>

Per approfondimenti sugli HttpHandler si veda:
https://www.aspitalia.com/liste/usag/script_ricerca_HttpHandlers.aspx

Sulla FormsAuthentication:
https://www.aspitalia.com/servizi/focus/mostra.aspx?ID=640

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi