8

Próbuję dowiedzieć się, plusy i minusy korzystania z uwierzytelniania opartego sessionid vs uwierzytelniania opartego ciasteczkasessionid vs ciasteczka

O ile widzę w oparciu ciasteczka uwierzytelniania

  • Użytkownik złoży logowanie wysyłanie żądania ich poświadczenia
  • poświadczenia są sprawdzane w bazie danych
  • Cookie zostanie ustawiony ze szczegółami użytkownika
  • Ten zostanie wykonane za pośrednictwem protokołu HTTPS, a pliki cookie zostaną zaszyfrowane.
  • w .NET, jeśli jest to tożsamość użytkownika authcookie zostanie ustawiony
  • db jest trafiony tylko raz i kolejne wywołania prostu sprawdzić cookie auth

W przypadku uwierzytelniania opartego sesji

  • Użytkownik przesyła żądanie logowania przesyłając swoje poświadczenia
  • Dane uwierzytelniające są sprawdzane w bazie danych
  • Generowany jest identyfikator sesji i jest również przechowywany w db
  • Cookie zostanie ustawiony z danymi użytkownika i generowanego identyfikatora sesji
  • Kolejne wywołania porówna identyfikator sesji przeciwko jednej w bazie
  • db jest trafiony każdym razem

Pytania

Czy istnieje jakiś powód, aby preferować jeden nad drugim? Czy plik cookie jest mniej bezpieczny (nawet jeśli je szyfrujesz i podpisujesz)? Czy wydajność sesji jest gorsza, ponieważ trafia ona do bazy danych podczas każdego połączenia? Widziałem kilka stron, które opierały się w taki czy inny sposób, ale nie potrafiłem dokładnie określić, z jakiego podejścia korzystać. Wszelkie dyskusje/sugestie będą bardzo mile widziane.

Odpowiedz

7

Trudno jest przetrawić to pytanie. Według mojej wiedzy, uwierzytelnianie oparte na formularzach ma dwa smaki: pliki cookie i pliki cookie. Preferowane jest uwierzytelnianie oparte na plikach cookie.

W wersji opartej na plikach cookie użytkownik otrzymuje cookie, którego wartością jest zaszyfrowany bilet Uwierzytelniania Form. Plik cookie jest zaszyfrowany na serwerze. Dopóki klucz szyfrowania nie zostanie udostępniony z pliku machine.config lub nadpisany w pliku Web.config, plik cookie może zostać odszyfrowany tylko przez serwer, który go wystawił. Uważam, że szyfrowanie to AES, które jest bardzo bezpieczne.

W podejściu bez plików cookie, ładunek pliku cookie jest umieszczany w url za pomocą modułu HTTP. Takie podejście jest stosowane tylko wtedy, gdy urządzenie nie obsługuje plików cookie (rzadko). Podejście typu "cookless" nie jest preferowane - czyni AJAX trudniejszym.

Patrz:

http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx

i

http://support.microsoft.com/kb/910443

+0

Przeprosiny za opóźnioną odpowiedź.Obecnie audytuję pewien kod (Java), który faktycznie tworzy klucz sesji, gdy użytkownik loguje się, zapisuje go jako plik cookie i za każdym razem, gdy wywoływana jest usługa chroniona, otrzymuje klucz sesyjny i sprawdza bazę danych, aby sprawdzić, czy sesja jest aktywna. Wydaje się, że jest to inny projekt niż formularz ASP, gdzie nie trafiamy do bazy za każdym razem. Podejście z sesją i sprawdzenie bazy danych wydaje się być nieefektywne. Czy mam rację, myśląc w ten sposób? – user275157

+3

Moja opinia: Uderzanie w db z kontrolą sesji dla każdego wniosku nie jest wielkim problemem. Sama tabela sesji będzie wymagać starannego indeksowania i optymalizacji, aby uniknąć wąskich gardeł. – Brett

+0

Dzięki. I tylko dla pewności - czy mam rację, sądząc, że powyższa metoda niekoniecznie jest bezpieczniejsza niż metoda autorów formularzy? – user275157

Powiązane problemy