2014-05-11 5 views
5

Ho sperimentato l'autenticazione dei moduli ASP.NET personalizzati e qualcosa che mi confonde è dove impostare quali ruoli sono associati a un utente. Lettura di vari tutorial Ho visto suggerimenti per utilizzare Application_AuthenticateRequest o FormsAuthentication_OnAuthenticate, con l'unica differenza nel codice di essere il modo in cui lo userPrincipal è assegnato a User.Qual è la differenza tra Application_AuthenticateRequest e FormsAuthentication_OnAuthenticate

Context.User = userPrincipal; 

e

e.User = userPrincipal; 

seguito è il metodo completato richiede ciascuna. Sono funzionalmente equivalenti o c'è qualche differenza di cui dovrei essere a conoscenza?

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
    { 
     HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
     if (authCookie != null) 
     { 
      FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
      string[] roles = authTicket.UserData.Split(';'); 
      GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(authTicket.Name), roles); 
      Context.User = userPrincipal; 
     } 
    } 


    protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e) 
    { 
     HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
     if (authCookie != null) 
     { 
      FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
      string[] roles = authTicket.UserData.Split(';'); 
      GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(authTicket.Name), roles); 
      e.User = userPrincipal; 
     } 
    } 

risposta

5

Questi sembrano come se fossero gli stessi, e probabilmente produrranno più o meno gli stessi risultati. Ma ci sono alcune differenze chiave, che riguardano la pipeline di Asp.net e l'ordine in cui vengono chiamati e attivati ​​vari eventi.

Quando asp.net si inizializza, aggancia il gestore FormsAuthentication_OnAuthenticate() all'evento Application_AuthenticateRequest. Quindi, quando viene chiamato AuthenticateRequest, passa attraverso la catena di gestori e li chiama in ordine.

Si dà il caso che il primo modulo che asp.net configura per questo è FormsAuthentication, il che significa che il gestore FormsAuthentication_OnAuthenticate() verrà chiamato per primo, seguito da eventuali moduli personalizzati che possono essere configurati e infine qualsiasi cosa configurata nel global.asax.

Fondamentalmente, è tutta una questione di cose d'ordine sono chiamati a.

Quindi la risposta alla domanda, qual è la differenza tra loro .. beh, si tratta di due diversi gestori che sono chiamati in diversi punti la pipeline di autenticazione per lo stesso evento.

Nella maggior parte dei casi, probabilmente non importa quale si è utilizzato, ma in alcuni casi potrebbe .. per esempio, se avete fatto il lavoro nel metodo FormsAuthentication_OnAuthenticate(), un gestore tardi nella catena potrebbe sovrascrivere quello hai finito con le sue impostazioni.