#720 - Un HttpHandler per la FormsAuthentication sui file con la stessa estensione

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:
http://www.aspitalia.com/liste/usag/script_ricerca_HttpHandlers.aspx

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


Approfondimenti
Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.