2010-04-14 16 views
6

Na przykład: jeśli pobieram plik User.Identity.Name, czy pochodzi on z pliku cookie .ASPXAUTH, czy jest pobierany z bazy danych za pomocą mojego dostawcy członkostwa?Skąd pochodzą dane User.Identity?

Czy są jakieś żądania bazy danych podczas dostępu do User.Identity?

Dzięki.


EDIT: Teraz jestem pewien, że pochodzi z biletami ciasteczka uwierzytelniania, ale nie może znaleźć żadnej oficjalnej dokumentacji, aby to potwierdzić. Ktoś?

Odpowiedz

1

To powinno odpowiedzieć na to pytanie ...

„Formularze bilet uwierzytelnianie obejmuje nie tylko tożsamość użytkownika, ale zawiera również informacje, które pomogą zapewnić integralność i bezpieczeństwo token. " Zaczerpnięty z poniższego artykułu: Microsoft

http://www.asp.net/security/tutorials/forms-authentication-configuration-and-advanced-topics-vb

Poza tym wyjaśnieniem, obserwując zachowanie ASP.NET obsługuje również do wniosku, że nazwa jest w rzeczywistości, przechowywane w ciasteczkach ASPXAUTH: ASP.NET nie trafi do bazy danych na kolejnych żądaniach strony po uwierzytelnieniu użytkownika. Możesz to udowodnić samodzielnie, tak jak ja, uruchamiając program SQL Profiler w celu monitorowania bazy danych, ponieważ jest ona używana przez aplikację ASP.NET.

Należy również pamiętać, że dane nazwy użytkownika i biletu uwierzytelniającego NIE są przechowywane w stanie sesji. Oprócz podniesienia kwestii bezpieczeństwa, ten rodzaj implementacji spowodowałby złamanie członkostwa ASP.NET po wyłączeniu stanu sesji. Oto kolejna odpowiedź przepełnienie stosu wskazuje, że Forms Authentication (członkostwo) i dane państwo Sesja nie mają nic wspólnego ze sobą:

Does FormsAuthentication.SetAuthCookie() make a session based cookie?

tę odpowiedź również linki do artykułu MSDN here, który wyjaśnia cookie ASPXAUTH w szczegółach, chociaż artykuł, o którym wspomniałem powyżej, wydaje się bardziej aktualny.

0

.ASPXAUTH cookie/User.Identity pochodzi z uwierzytelniania (Windows, formularze).

Jeśli próbujesz uzyskać użytkownika do członkostwa trzeba użyć

Membership.GetUser() 

lub

Membership.GetUser(User.Identity.Name) 

documentation here co doprowadziłoby do połączenia DB.

+0

Rozumiem, że pochodzi z uwierzytelniania. Jednak, gdy wywołuję User.Identity.Name - skąd jest pobierana wartość? Pliki cookie lub db lub sesja? – niaher

+0

Pliki cookie istnieją tylko po uwierzytelnieniu ... więc ... wszystko zależy od twojego schematu uwierzytelniania. – Nix

1

Wierzę, że informacje uwierzytelniające są specyficzne dla sesji i są utrzymywane w ramach procesu ASP.net lub na zewnątrz lub nawet serwera SQL. Po uwierzytelnieniu użytkownika generowany jest token sesji, token służy do śledzenia informacji o uwierzytelnionym użytkowniku w serwisie państwowym. Przy kolejnych żądaniach token sesji jest używany do pobierania tożsamości użytkownika i tam, gdzie dostajemy wstępnie wypełnione obiekty, takie jak User.Identity.Name. musi to zostać zaimplementowane w module uwierzytelniania formularzy lub w module uwierzytelniania systemu Windows, w zależności od typu uwierzytelniania, którego używasz. Jeśli ustawisz tryb uwierzytelniania bez dostępu do pliku, token sesji jest wyświetlany w adresie URL. Po zakończeniu sesji wszystkie informacje dotyczące sesji są usuwane z usługi państwowej.

Mam nadzieję, że to wyjaśnia!

+0

Mimo że jest to akceptowana odpowiedź, tak naprawdę nie odpowiada na moje pytanie. – niaher

+0

Dlaczego więc to przyjąłeś? – IsmailS

+0

Zostałem zmuszony, ponieważ pytanie dotyczyło nagrody. – niaher

1

To zależy od rodzaju sesji, z której korzystasz. Sesje mogą być zmieniane za pomocą dwóch parametrów: 1. Używanie ciasteczek-Cookiela, lub użycie ciasteczka 2. Proces do przechowywania informacji o stanie sesji -Inproc (w procesie), outproc (usługa stanowa ASP.net) lub Sql Server.

Jeśli używasz serwera SQL do przechowywania informacji o stanie, z pewnością zostanie wykonane zapytanie do bazy danych w celu pobrania danych sesji. Więcej szczegółów tutaj-

http://www.codeproject.com/KB/aspnet/ExploringSession.aspx

Powiązane problemy