Se vi è mai capitato di andare a leggere le informazioni riguardo l'utente corrente nell'evento BeginRequest di un HttpModule, vi sarete accorti che la proprietà HttpContext.Current.User è ancora a null.
Questo perchè la richiesta è stata appena sottoposta ad ASP.NET, mentre, se provate a leggerne il contenuto dell'evento EndRequest, troverete tutte le informazioni sull'utente corrente (sempre che sia autenticato).

Esiste un modo però, per arrivare lo stesso a quelle informazioni.
Dichiarando l'utilizzo della Forms Authentication in questo modo:

<authentication mode="Forms">

<forms name=".ASPXAUTH" loginUrl="login.aspx"/>
</authentication>

all'interno dell'HttpModule è possibile prelevare informazioni dal cookie di chi esegue la richiesta e creare un nuovo oggetto di tipo GenericPrincipal. Vediamo come:

public class DefaultHttpModule : IHttpModule

{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
HttpCookie cookie = context.Request.Cookies.Get(".ASPXAUTH");
if (cookie != null)
{
FormsAuthenticationTicket fat = FormsAuthentication.Decrypt(cookie.Value);
string[] roles = Roles.GetRolesForUser(fat.Name);
GenericIdentity identity = new GenericIdentity(fat.Name);
GenericPrincipal principal = new GenericPrincipal(identity, roles);
//... }
}
}