2014-05-11 15 views
5

Eksperymentowałem z niestandardowym uwierzytelnianiem formularzy ASP.NET, a tym, co mnie myli, jest to, gdzie ustawić role przypisane do użytkownika. Odczytywanie różnych samouczków Napotkano sugestie dotyczące użycia Application_AuthenticateRequest lub FormsAuthentication_OnAuthenticate, z tą różnicą, że kod userPrincipal jest przypisany do userPrincipal przypisany do .Jaka jest różnica między Application_AuthenticateRequest i FormsAuthentication_OnAuthenticate

Context.User = userPrincipal; 

i

e.User = userPrincipal; 

Poniżej jest zakończona metoda wymaga każda. Czy są one funkcjonalnie równoważne, czy jest jakaś różnica, o której powinienem wiedzieć?

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; 
     } 
    } 

Odpowiedz

5

Wygląda na to, że są takie same i prawdopodobnie przyniosą mniej więcej takie same wyniki. Ale są pewne kluczowe różnice, które mają związek z rurociągiem Asp.net i kolejnością wywoływania i uruchamiania różnych zdarzeń.

Po uruchomieniu asp.net przechwytuje obsługę FormsAuthentication_OnAuthenticate() do zdarzenia Application_AuthenticateRequest. Kiedy zostanie wywołana AuthenticateRequest, przechodzi przez łańcuch obsługi i wywołuje je w kolejności.

Tak się składa, że ​​pierwszy moduł asp.net konfiguruje się do tego, to FormsAuthentication, co oznacza, że ​​najpierw zostanie wywołany moduł obsługi FormsAuthentication_OnAuthenticate(), a następnie wszystkie niestandardowe moduły, które mogą być również skonfigurowane, a na końcu wszystko skonfigurowane w global.asax.

Zasadniczo chodzi tu o rzeczy porządkowych są nazywane w.

Więc odpowiedź na pytanie, jaka jest różnica między nimi .. dobrze, są to dwie różne teleskopowe, które są wywoływane w różnych punktach potok uwierzytelniania dla tego samego zdarzenia.

W większości przypadków prawdopodobnie nie ma znaczenia, z którego z nich korzystałeś, ale w niektórych przypadkach może .. na przykład, jeśli wykonałeś zadanie w metodzie FormsAuthentication_OnAuthenticate(), późniejszy przewodnik w łańcuchu może nadpisać co zrobiłeś to z własnymi ustawieniami.

Powiązane problemy