Thread.CurrentPrincipal establecido en Application_AuthenticationRequest no se establece más adelante en la aplicación
-
03-07-2019 - |
Pregunta
En el archivo global.asax para Application_AuthenticationRequest estoy configurando Thread.CurrentPrincipal en un principal personalizado. También configuré el HttpContext.Current.User en el mismo principal.
Sin embargo, más adelante en la aplicación, cuando necesito enviar el Thread.CurrentPrincipal a nuestro tipo personalizado, recibo un error de tiempo de ejecución que dice: No se puede convertir el objeto de tipo 'System.Web.Security.RolePrincipal' para escribir 'OurCustomPrincipal'.
¿Cómo se restableció Thread.CurrentPrincipal a RolePrincipal, y más al punto, cómo lo mantengo en CustomPrincipal que configuramos en global.asax
Gracias de antemano
Solución
Seguramente ya ha resuelto su problema, pero por si acaso, si está utilizando RoleProvider de ASP.NET, RoleManagerModule sobrescribe el objeto GenericPrincipal creado por FormsAuthenticationModule y lo reemplaza con un objeto RolePrincipal durante PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11 -vb.aspx
Otros consejos
En resumen, una solución rápida es realizar sus reemplazos de identidad y principal en el controlador Application_OnPostAuthenticateRequest.
Verifique que haya implementado una clase para IIDentity & amp; Interfaz principal y luego está usando algo como el siguiente código para asignar el principal actual.
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