Thread.CurrentPrincipal défini dans Application_AuthenticationRequest n'est pas défini ultérieurement dans l'application
-
03-07-2019 - |
Question
Dans le fichier global.asax pour Application_AuthenticationRequest, je règle Thread.CurrentPrincipal sur un principal personnalisé. J'ai également défini HttpContext.Current.User sur le même principe.
Cependant, plus tard dans l'application lorsque je dois convertir le Thread.CurrentPrincipal à notre type personnalisé, je reçois une erreur d'exécution qui dit: Impossible de convertir l'objet de type 'System.Web.Security.RolePrincipal' en 'OurCustomPrincipal'.
Comment Thread.CurrentPrincipal a-t-il été réinitialisé sur RolePrincipal et plus précisément sur le point comment le conserver sur le CustomPrincipal défini dans le fichier global.asax
Merci d'avance
La solution
Vous avez sûrement résolu votre problème maintenant, mais juste au cas où, si vous utilisez RoleProvider d'ASP.NET, RoleManagerModule remplace l'objet GenericPrincipal créé par FormsAuthenticationModule et le remplace par un objet RolePrincipal créé par PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11 -vb.aspx
Autres conseils
En résumé, une solution rapide consiste à remplacer le principal et l'identité par le gestionnaire Application_OnPostAuthenticateRequest.
Vérifiez que vous avez implémenté une classe pour IIDentity & amp; L’interface Iprincipal, puis vous utilisez quelque chose comme le code suivant pour attribuer le 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