Thread.CurrentPrincipal impostato in Application_AuthenticationRequest non è impostato successivamente nell'app
-
03-07-2019 - |
Domanda
Nel file global.asax per Application_AuthenticationRequest sto impostando Thread.CurrentPrincipal su un'entità personalizzata. Ho anche impostato HttpContext.Current.User sullo stesso principal.
Tuttavia, più avanti nell'app, quando ho bisogno di trasmettere Thread.CurrentPrincipal al nostro tipo personalizzato, ricevo un errore di runtime che dice: Impossibile eseguire il cast dell'oggetto di tipo "System.Web.Security.RolePrincipal" per digitare "OurCustomPrincipal".
Come è stato reimpostato Thread.CurrentPrincipal su RolePrincipal e altro ancora al punto in che modo posso mantenerlo su CustomPrincipal impostato in global.asax
Grazie in anticipo
Soluzione
Ormai hai sicuramente risolto il tuo problema, ma nel caso in cui, se stai utilizzando RoleProvider da ASP.NET, RoleManagerModule sovrascrive l'oggetto GenericPrincipal creato da FormsAuthenticationModule e lo sostituisce con un oggetto RolePrincipal durante PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11 -vb.aspx
Altri suggerimenti
Per riassumere, una soluzione rapida consiste nell'eseguire invece le sostituzioni di identità e principal sul gestore Application_OnPostAuthenticateRequest.
Verifica di aver implementato una classe per IIDentity & amp; Interfaccia Iprincipal e quindi stai usando qualcosa come il seguente codice per assegnare il principio corrente.
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