Thread.CurrentPrincipal, установленный в Application_AuthenticationRequest, не устанавливается позже в приложении - PullRequest
6 голосов
/ 01 мая 2009

В файле global.asax для Application_AuthenticationRequest я устанавливаю Thread.CurrentPrincipal для пользовательского участника. Я также установил для HttpContext.Current.User того же принципала.

Однако позже в приложении, когда мне нужно привести Thread.CurrentPrincipal к нашему пользовательскому типу, я получаю сообщение об ошибке во время выполнения: Невозможно привести объект типа «System.Web.Security.RolePrincipal» к типу «OurCustomPrincipal».

Как Thread.CurrentPrincipal был сброшен в RolePrincipal, и более того, как мне сохранить его в CustomPrincipal, который мы установили в global.asax

Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 27 сентября 2009

Вы наверняка уже решили свою проблему, но на всякий случай, если вы используете RoleProvider из ASP.NET, RoleManagerModule перезаписывает объект GenericPrincipal, созданный FormsAuthenticationModule, и заменяет его объектом RolePrincipal во время PostAuthenticateRequest: http://www.asp.net/Learn/Security/tutorial-11-vb.aspx

3 голосов
/ 06 апреля 2011

Подводя итог, можно быстро исправить замену принципала и удостоверения на обработчике Application_OnPostAuthenticateRequest.

0 голосов
/ 25 июня 2009

Убедитесь, что вы реализовали класс для интерфейса IIDentity & Iprincipal, а затем используете что-то вроде следующего кода для назначения 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
...