Thread.CurrentPrincipal Set em Application_AuthenticationRequest não está definido mais tarde no aplicativo
-
03-07-2019 - |
Pergunta
No arquivo global.asax para o Application_authenticationRequest, estou configurando o thread.currentPrincipal para um diretor personalizado. Eu também configurei o httpcontext.current.user para o mesmo principal.
No entanto, mais tarde no aplicativo, quando eu preciso lançar o thread.CurrentPrincipal para o nosso tipo personalizado, recebo um erro de tempo de execução dizendo: Incapaz de lançar o objeto do tipo 'System.Web.Security.RolePrincipal' para digitar 'OurCustomPrincipal'.
Como o Thread.CurrentPrincipal foi reiniciado para RolePrincipal e, mais até o ponto, como faço para mantê -lo no CustomPrincipal que definimos no Global.asax
desde já, obrigado
Solução
Você certamente já resolveu seu problema agora, mas, por caso, se estiver usando o RoleProvider do ASP.NET, o Rolemanagermodule substitui o objeto genérico criativo criado pelo FormSauthenticationModule e o substitui por um objeto de representação durante o PostAthenticaterequest:http://www.asp.net/learn/security/tutorial-11-vb.aspx
Outras dicas
Para resumir, uma correção rápida é executar suas substituições principais e de identidade no manipulador Application_onPostauthenticaterequest.
Verifique se você implementou uma classe para interface IIDentity e iPrincipal e, em seguida, está usando algo como o código a seguir para atribuir o CurrentPrincipal.
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