2009-04-24 1 views
5

У меня естьОткуда возникает Web.HttpContext.Current.User.Identity.Name?

FormsAuthentication.SetAuthCookie("someName", True) 

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

<location path="myPage.aspx"> 
    <system.web> 
     <authorization> 
      <allow roles="SomeRole"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

Насколько я могу сказать, что делает вызов реализации моей роли поставщика в GetRolesForUser. Кажется, он получает параметр username из Web.HttpContext.Current.User.Identity.Name.

Мой вопрос: Когда имя пользователя из файла cookie auth устанавливается в качестве имени в моем текущем имени пользователя?

ответ

3

имя пользователя является просто свойство объекта пользователя IPrinciple и этот объект расположен в одном из стандартных ASP.NET HttpModules, в вашем случае, вероятно, System.Web.Security.FormsAuthenticationModule как часть метод OnAuthenticate.

Если вы хотите знать, как изменить эту информацию, например, установить другое имя пользователя или идентификатор, вам нужно посмотреть на создание global.asax или настраиваемого HTTPModule, который переопределяет Application_AuthenticateRequest. Вот пример:

Public Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim cookieName As String = FormsAuthentication.FormsCookieName 
    Dim authCookie As HttpCookie = HttpContext.Current.Request.Cookies(FormsAuthentication.FormsCookieName) 

    If Not IsNothing(authCookie) Then 
     Dim authTicket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(authCookie.Value) 
     If IsNothing(authTicket) OrElse authTicket.Expired Then 
      HttpContext.Current.Response.Redirect(FormsAuthentication.LoginUrl) 
     Else 
      Dim id As New FormsIdentity(authTicket) 

      Dim newUser As New YourCustomUserType(id.Name) 
      HttpContext.Current.User = newUser 
     End If 
    End If 
End Sub 
2

Похоже, что это может произойти в частном методе OnAuthenticate в System.Web.Security.FormsAuthenticationModule. Линия

e.Context.SetPrincipalNoDemand(
     new GenericPrincipal(new FormsIdentity(ticket), 
     new string[0])); 
Смежные вопросы