Używam przepływu OAuth 2.0 poświadczeń właściciela zasobu w SPA AngularJS. Istnieje kilka artykułów (here, here ..) i odpowiedź na this question, które wyjaśniają, że nie powinniśmy przechowywać odświeżania tokenów na kliencie (web) (LocalStorage), ale przechowują je zaszyfrowane w HttpOnly Cookie i używają interfejsu API proxy, gdzie zaimplementuj odszyfrowanie tokena refreh w celu przekazania go do usługi tokena zabezpieczającego.Ochrona CSRF w celu odświeżenia tokena Cookie w SPA
Większość artykułów daje wskazówkę, że powinniśmy dbać o CSRF za pomocą jednego z powszechnych mechanizmów ochrony. Zastanawiam się, jakie jest najlepsze rozwiązanie w aplikacji na jedną stronę.
Odnośnik Angular $http wyjaśnia domyślny mechanizm, w jaki sposób należy odliczać CSRF: Serwer musi ustawić plik cookie o nazwie XSRF-TOKEN
. Ten plik cookie musi być odczytywany przez Javascript, abyśmy mogli ustawić nagłówek HTTP X-XSRF-TOKEN
w naszych żądaniach. Czy ten mechanizm jest wystarczający, aby chronić scenariusz toresztu refreh?
Uruchom aplikację po raz pierwszy. Brak dostępowego tokena i pliku cookie, musimy zalogować się przy użyciu nazwy użytkownika i hasła.
api/login
daje nam token dostępu, który przechowujemy w pamięci i ustawia dwa pliki cookie. HttpOnly refreh token cookie oraz plik cookie, który można odczytać w formacie JSXSRF-TOKEN
.Token dostępu wygaśnie. Połączenie z
api/token
sprawdza poprawnośćXSRF-TOKEN
i używa pliku cookie tokena do zwrócenia nowego tokena dostępu; ustawia nowy plik cookie odświeżaniaUruchom ponownie aplikację od
AppCache
. Brak tokena dostępowego w pamięci, ale pliki cookie są dostępne. Użyjapi/token
...Zły facet chce ukraść nasze ciasteczko refreh. Przygotowana strona wysyła zapytanie pod numer
api/token
z naszymi ciasteczkami, ale bez nagłówka HTTPX-XSRF-TOKEN
.
Jakieś poważne problemy z bezpieczeństwem?
Cóż, to nadal nie chroni przed sesją/cookie/hijack localStorage. Aby to zrobić, musisz dodatkowo zweryfikować ostatni ważny token dostępu w kroku 2 - to zapewni, że skradzione pliki cookie przestaną być ważne. – Hatch