2009-04-24 16 views
5

devoDa dove proviene Web.HttpContext.Current.User.Identity.Name?

FormsAuthentication.SetAuthCookie("someName", True) 

come parte della mia sequenza di login personalizzato. Più tardi, ho qualche pagina consentendo solo un ruolo specifico:

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

Per quanto posso dire, che effettua una chiamata alla realizzazione del mio provider di ruoli di GetRolesForUser. Sembra che ottenga il parametro username da Web.HttpContext.Current.User.Identity.Name.

La mia domanda è .... quando fa il nome utente dal cookie di autenticazione ottenere impostato come nome nella mia identità dell'utente corrente?

risposta

3

Il nome utente è solo una proprietà dell'oggetto utente IPrinciple e che oggetto si trova in uno dei ASP.NET standard di httpModules, nel tuo caso, probabilmente System.Web.Security.FormsAuthenticationModule come parte di il metodo OnAuthenticate.

Se ciò che si vuole sapere è come cambiare queste informazioni, come ad esempio l'impostazione di un nome utente o un'identità diversa, si vuole guardare a creare un Global.asax o di un costume HTTPModule che sostituisce l'Application_AuthenticateRequest. Ecco un esempio:

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

Sembra che possa verificarsi nel metodo privato OnAuthenticate in System.Web.Security.FormsAuthenticationModule. La linea è

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