Thread.CurrentPrincipal, заданный в Application_AuthenticationRequest, не задается позже в приложении.

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

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

Убедитесь, что вы реализовали класс для интерфейса IIDentity и Iprincipal, а затем используете что-то вроде следующего кода для назначения текущего принципала.

    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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top