2009-05-01 5 views
6

En el archivo global.asax para Application_AuthenticationRequest estoy configurando Thread.CurrentPrincipal a un principal personalizado. También configuré HttpContext.Current.User en el mismo principal.Thread.CurrentPrincipal establecido en Application_AuthenticationRequest no se establece más adelante en la aplicación

Sin embargo más adelante en la aplicación cuando necesito a emitir el Thread.CurrentPrincipal a nuestro tipo de encargo, me sale un error de ejecución diciendo: No se puede convertir objeto de tipo 'System.Web.Security.RolePrincipal' al tipo 'OurCustomPrincipal '.

¿Cómo surgió la Thread.CurrentPrincipal reconfiguradas a RolePrincipal, y más al punto, ¿cómo lo guardo en el CustomPrincipal fijamos en el Global.asax

Gracias de antemano

Respuesta

6

seguro que se ha resuelto el problema por ahora, pero por si acaso, si está utilizando el RoleProvider de ASP.NET, la RoleManagerModule sobrescribe el objeto creado por el GenericPrincipal FormsAuthenticationModule y lo reemplaza con un objeto durante el RolePrincipal PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11-vb.aspx

+0

esto comenzó a suceder de la nada. No sabe por qué. agregando '' resolvió el problema. – tugberk

0

Compruebe que ha ha implementado una clase para IIDentity & interfaz Iprincipal y luego está utilizando algo así como el siguiente código para asignar el actualprincipal.

Dim userIdentity As CustomIdentity 
    userIdentity = New CustomIdentity(username, True,"forms", sessionId) 

    Dim principal As New CustomPrincipal(userIdentity, arrRoles) 
    HttpContext.Current.User = principal 
    System.Threading.Thread.CurrentPrincipal = principal 
3

en resumen, una solución rápida es llevar a cabo sus principales y de identidad reemplazos en el manejador de Application_OnPostAuthenticateRequest lugar.

Cuestiones relacionadas