Pergunta

Eu tenho

FormsAuthentication.SetAuthCookie("someName", True)

como parte do meu seqüência de login personalizado. Mais tarde, eu tenho alguma página só permitindo um papel específico:

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

Tanto quanto eu posso dizer, que faz uma chamada para a implementação do meu provedor de função de GetRolesForUser. Parece para obter o parâmetro nome de usuário de Web.HttpContext.Current.User.Identity.Name.

A minha pergunta é .... quando é que o nome de usuário do conjunto get cookie de autenticação como o nome na minha identidade do usuário atual?

Foi útil?

Solução

O nome de usuário é apenas uma propriedade do objeto de usuário IPrinciple e esse objeto é definido em um dos o padrão ASP.NET httpModules, no seu caso, provavelmente System.Web.Security.FormsAuthenticationModule como parte do método OnAuthenticate.

Se o que você quer saber é como mudar esta informação, como a definição de um nome de usuário ou identidade diferente, você vai querer olhar para a criação de um global.asax ou um HTTPModule personalizado que substitui o Application_AuthenticateRequest. Aqui está um exemplo:

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

Outras dicas

parece que pode ocorrer no OnAuthenticate método privado em System.Web.Security.FormsAuthenticationModule. A linha é

 e.Context.SetPrincipalNoDemand(
      new GenericPrincipal(new FormsIdentity(ticket),
      new string[0]));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top