Откуда берется Web.HttpContext.Current.User.Identity.Name? - PullRequest
5 голосов
/ 24 апреля 2009

у меня

FormsAuthentication.SetAuthCookie("someName", True)

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 25 апреля 2009

Имя пользователя - это просто свойство объекта пользователя IPrinciple, и этот объект задается в одном из стандартных HTTPModules ASP.NET, в вашем случае, вероятно, 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 голосов
/ 24 апреля 2009

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

 e.Context.SetPrincipalNoDemand(
      new GenericPrincipal(new FormsIdentity(ticket),
      new string[0]));
...