/ / Uwierzytelnianie AngularJS i oparte na tokenie XSRF - javascript, angularjs, uwierzytelnianie, autoryzacja, csrf

AngularJS Authentication i oparty na tokenie XSRF - javascript, angularjs, uwierzytelnianie, autoryzacja, csrf

Jestem nowy w firmie Angular i opracowuję aplikację, aby dowiedzieć się więcej.

Chcę zbudować uwierzytelnianie. Czy ktoś może skomentować, czy jest to dobre podejście?

W użyciu posługuję się podobnym podejściem jak w przypadku XSRF z RestfullWS.

1) Po uwierzytelnieniu utwórz token w pliku cookie userID + sessionId + salt i zapisz ten ciąg za pomocą SHA256

2) Jakie informacje należy przekazać do aplikacji klienckiej?

3) Przekaż token utworzony na 1) serwerowi za każdym razem, gdy przechodzimy na stronę, która wymaga uwierzytelnienia

4) Po stronie klienta sprawdź, czy użytkownik jest uwierzytelniony.

Mój problem polega na tym, jak możemy sprawdzić po stronie klientabezpiecznie, jeśli użytkownik jest uwierzytelniony? Czy nie jest prawdą, że jeśli zapiszemy te informacje w javascriptie, że te informacje zostaną naruszone? Jak opracować bezpieczną funkcję "isAuthenticated" javascrip? Czy funkcja powinna uzyskać odpowiedź od serwera, który wie, jak sprawdzić token?

Czy jest to dobre podejście, czy istnieją lepsze sposoby na to?

Dziękuję Ci bardzo.

Odpowiedzi:

2 dla odpowiedzi № 1

Zawsze należy zakładać, że klient jest lub może być zagrożony. Nie można więc na pewno stwierdzić po stronie klienta, że ​​użytkownik jest w 100% uwierzytelniony, absolutnie na pewno bez żadnych wątpliwości.

Ale to prawie nigdy nie jest tak ważne, jak robimyto musi być. Po stronie klienta zwykle wyświetlamy interfejs użytkownika, a nie przetwarzamy transakcję kartą kredytową. Nie mamy użytkownika A wysyłającego użytkownikowi B wiadomości e-mail w 100% w kliencie - wysyłamy go na serwer, a on zajmuje się resztą.

Dlatego naprawdę chcesz:

  1. Skąd mam wiedzieć na temat klienta, że ​​powinienem działać tak, jak jestem zalogowany? Czy kiedy przestanę wyświetlać formularz logowania i zacząć wyświetlać skrzynkę odbiorczą?

  2. Skąd mam wiedzieć na serwerze, że ten klient jest naprawdę tym, kim on / ona mówi, że jest?

Pierwsze jest łatwe. Rysowanie pustej skrzynki odbiorczej jest bezużyteczne. Użyj obecności pliku cookie, aby włączyć to zachowanie, a co jeśli zostanie "zhakowany"? Użytkownik może zobaczyć pustą skrzynkę odbiorczą? To nie ma żadnej wartości. Równie łatwo mogliby pobrać swoje surowe szablony - będą one publicznie dostępne, więc nie są dokładnie tajne, więc tutaj po prostu szukasz spójnego zachowania, które "ma sens".

Jedna rzecz, o której zwykle się martwisz, toklient to takie rzeczy jak kradzież plików cookie i ataki typu "man-in-the-middle". Istnieją różne techniki walki z tym i powinieneś je zgłębić. Są zbyt długie, by je tu ukryć, i nie są specyficzne dla AngularJS.

W przypadku drugiego problemu, teraz musisz sprawdzić poprawnośćsesja użytkownika Aby zapobiec kradzieży plików cookie oprócz tego, co już jest haszowaniem, często obejmuje się takie elementy, jak nonce z 2-etapowego cyklu auth (często w OAuth) i inne rzeczy, takie jak być może adres IP użytkownika To jest problem w aplikacjach mobilnych, gdzie może się to zmienić, ale wciąż dość powszechny.W praktyce ciężko jest to zrobić masowo, a większość hakerów chce zrobić wielkie kompromisy, a nie tylko zhakować jednego użytkownika ... ale ty powinienem nadal robić tutaj swoją należytą staranność.

Twój plan "prawdopodobnie" robi te rzeczy, aleponieważ podsumowujesz tylko to, wciąż jest dużo do omówienia. Dodam tylko, że w przypadku aplikacji czysto API coraz częściej używa się tylko surowych nagłówków, a nie plików cookie. "Są trochę trudniejsze do kradzieży - nie niemożliwe, ale wszystko, co można zrobić, aby zmniejszyć swój atak powierzchnia to Dobra Rzecz (tm).

W końcu myślę, że znajdziesz to bardzo małodotyczy to AngularJS. Wybierz odpowiedni schemat uwierzytelniania dla całej aplikacji i prawie na pewno będzie sposób na zintegrowanie go z Angular.