2009-04-24 28 views
5

que tienen¿De dónde viene Web.HttpContext.Current.User.Identity.Name?

FormsAuthentication.SetAuthCookie("someName", True) 

como parte de mi secuencia de inicio de sesión personalizado. Más tarde, tengo una página sólo permite una función específica:

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

Por lo que yo puedo decir, que hace una llamada a la aplicación de mi proveedor de papel de GetRolesForUser. Parece obtener el parámetro de nombre de usuario de Web.HttpContext.Current.User.Identity.Name.

Mi pregunta es ... ¿Cuándo se establece el nombre de usuario de la cookie de autenticación como el nombre en mi identidad de usuario actual?

Respuesta

3

El nombre de usuario es sólo una propiedad del objeto de usuario IPrinciple y ese objeto se encuentra en uno de los estándar de ASP.NET httpModules, en su caso, probablemente como parte de System.Web.Security.FormsAuthenticationModule el método OnAuthenticate.

Si lo que desea saber es cómo cambiar esta información, como establecer un nombre de usuario o identidad diferente, deberá considerar la creación de un archivo global.asax o un HTTPModule personalizado que sustituya a Application_AuthenticateRequest. Aquí hay un ejemplo:

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

Parece que puede ocurrir en el método privado OnAuthenticate en System.Web.Security.FormsAuthenticationModule. La línea es

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