2014-05-13 14 views
5

Buduję aplikację AngularJS, która współpracuje z interfejsem API, który używa tokenów uwierzytelniania do uwierzytelniania użytkowników. Wydaje się, że wszystko działa dobrze, ale zmagam się z metodą, aby właściwie utrzymać token uwierzytelniania między żądaniami.Trwający token uwierzytelniania w AngularJS

W tej chwili, gdy użytkownik loguje się przy użyciu prawidłowych poświadczeń, zwracana jest nazwa authToken i ustawiam ją na $rootScope.authToken. Wysyłam również ten token autoryzacji dla przyszłych żądań, ale jeśli wykonam twardy przeładowanie, ponownie załaduję stronę F5 $rootScope zostanie wyczyszczona i będę musiał ponownie uwierzytelnić.

Jestem świadomy, że mogę przechowywać authToken w ciasteczku, ale czy to byłby najbezpieczniejszy sposób? Czy lepiej wykorzystać pamięć lokalną do przechowywania tokena? Jeśli używana jest pamięć lokalna, czy nie zostanie ona usunięta po ponownym uruchomieniu przeglądarki? Idealnie polubiłbym login, który trwałby przez kilka dni.

Odpowiedz

1

Po pierwsze, nie jestem pewien, co jest format swoimi authToken ale localStorage nie powinny być wykorzystywane do jakichkolwiek danych wrażliwych. Korzystanie z localStorage działa świetnie (i przeżywa ponowne uruchomienie przeglądarki), o ile twój telefon authToken jest względnie zabezpieczony przed manipulacją poprzez jakąś formę szyfrowania lub jednorazowo.

Zasadniczo należy uważać, ponieważ ponieważ wartość jest "widoczna" dla wszystkich użytkowników po stronie klienta, należy założyć, że można ją modyfikować lub zwiększać.

Czy myślisz o odwołaniu sesji logowania? Na przykład, jeśli chcesz wylogować się z aktywnych aktywnych sesji swojej aplikacji, jak to zrobić? Ponieważ authToken jest przechowywany po stronie klienta, może być konieczne dodanie znacznika czasu (lub innej unikatowej wartości), który można sprawdzić po stronie serwera.

+0

Czy w takim przypadku dopuszczalne jest szyfrowanie tokena logowania po stronie serwera, zanim zostanie ono wysłane do użytkownika, aby przechowywać zaszyfrowaną wersję? Następnie, gdy token zostanie wysłany na serwer, zostanie odszyfrowany i sprawdzony, aby upewnić się, że jest ważny itd. Nie ma problemu z odwołaniem wszystkich sesji użytkownika, są przechowywane w tabeli i każde żądanie klienta jest sprawdzane przeciwko nim. Jeśli wyczyścisz tabelę, wszyscy się wylogują :) –

+0

Tak, zdecydowanie zaszyfruj ją po stronie serwera i ponownie sprawdź po każdym żądaniu API, które otrzymuje serwer. Ten model jest najbezpieczniejszy do użycia jako podstawowa bramka bezpieczeństwa. Jest jeszcze kilka problemów z tym podejściem i polecam również ustawienie tokena CSRF (oprócz wartości 'authToken'). AngularJS natywnie obsługuje ten dodatkowy token, co dodaje kolejną barierę do twojej aplikacji. Przejrzyj dokumenty na XSRF tutaj: https://docs.angularjs.org/api/ng/service/$http –

+0

Awesome, thanks. –

Powiązane problemy