HttpContext.Current.User! = HttpContext.User?

EsHttpContext.Current.User en asax global no es lo mismo queHttpContext.User en un metodo de accion? Asigné al usuario algunos roles, pero parece que se pierden.

El siguiente código muestra lo que está sucediendo. Ambos Asserts son afectados cuando un usuario inicia sesión, primero en asax global, luego en el método de acción. Sin embargo dan diferentes resultados.

Primero esto:

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    // ... omitted some code to check user is authenticated
    FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity;

    string[] roles = new string[] { "admin", "user" };

    HttpContext.Current.User =
        new System.Security.Principal.GenericPrincipal(identity, roles);

    Assert(HttpContext.User.IsInRole("admin"));
}

Entonces esto en mi método de acción:

public ActionResult Index()
{
    bool isAdmin = HttpContext.User.IsInRole("admin");

    Assert(isAdmin); // this fails, isAdmin is false

    // ...
}

Usé los siguientes recursos

Esta respuesta tan

http://csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html

Respuestas a la pregunta(1)

Su respuesta a la pregunta