Thread.CurrentPrincipal establecido en Application_AuthenticationRequest no se establece más adelante en la aplicación

StackOverflow https://stackoverflow.com/questions/809727

  •  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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top