Spring Security + frontend. Wasze opinie na temat JWT i sesji

0

Do swojej aplikacji (Spring Boot) chcę dodać użytkowników, podpiąć Spring Security, a potem zrobić do tego frontend (Bootstrap - używając XHR, może React Bootstrap). Pierwszy raz robię front z logowaniem itp.
Jeżeli chodzi o Spring Security, to obczaiłem sobie 2 podejścia:

  1. JWT - bardzo fajne, ale
    • znalazłem info, że to niekoniecznie dobre narzędzie do takich celów (np. ze względu na rozmiar - ale w moim przypadku to nie problem)
    • brak wylogowywania - ale można ustawić datę wygaśnięcia tokenu
    • konieczność "odświeżania" tokenu
      plusy:
    • prostota, niezależność od formularzy, wszystko mogę ładnie załatwić za pomocą samego XHR
    • możliwość wygodnego udostępnienia API innym użytkownikom
    • nie ma CSRF
  2. "Tradycyjne" Basic auth - sesja - ciastko JSESSIONID
    • prostsza konfiguracja Spring Security
    • walka z domyślnymi mechanizmami Springa i przelądarki (np. przekierowania - nad tym jeszcze nie udało mi się zapanować :/)
    • upierdliwość CORS w połączeniu z XHR - działa dopiero po umieszczeniu pliku HTML w katalogu resources mojej aplikacji -> muszę resetować aplikację po wprowadzeniu zmian w HTML... Poza tym nie chcę, żeby front i backend były ze sobą tak mocno związane - chcę mieć dwa osobne repozytoria

Tak więc skłaniam się mimo wszystko w stronę JWT. Przeoczyłem coś ważnego w punktach wyżej? Czego byście użyli, pisząc własny projekt? Z czym się częściej spotykacie np. w pracy?

1

polecam JWT ze względu na prostotę użycia, parę razy użyłem razem z "ciachem", trzeba jeno pamiętać, żeby po wylogowaniu usuwać je z pamięci przeglądarki, więc to raczej nie problem, jak sam robisz front

1

brak wylogowywania - ale można ustawić datę wygaśnięcia tokenu

U usera usuwasz token, a na serwerze go blokujesz, da się.

Do plusów dodałbym cross-domain auth.

konieczność "odświeżania" tokenu

Według mnie to jest trochę problematyczne, bo można to ugryźć na różne sposoby.

1
Potat0x napisał(a):

Do swojej aplikacji (Spring Boot) chcę dodać użytkowników, podpiąć Spring Security, a potem zrobić do tego frontend (Bootstrap - używając XHR, może React Bootstrap). Pierwszy raz robię front z logowaniem itp.
Jeżeli chodzi o Spring Security, to obczaiłem sobie 2 podejścia:

  1. JWT - bardzo fajne, ale
    • znalazłem info, że to niekoniecznie dobre narzędzie do takich celów (np. ze względu na rozmiar - ale w moim przypadku to nie problem)
    • brak wylogowywania - ale można ustawić datę wygaśnięcia tokenu
    • konieczność "odświeżania" tokenu
      plusy:
    • prostota, niezależność od formularzy, wszystko mogę ładnie załatwić za pomocą samego XHR
    • możliwość wygodnego udostępnienia API innym użytkownikom
    • nie ma CSRF
  2. "Tradycyjne" Basic auth - sesja - ciastko JSESSIONID
    • prostsza konfiguracja Spring Security
    • walka z domyślnymi mechanizmami Springa i przelądarki (np. przekierowania - nad tym jeszcze nie udało mi się zapanować :/)
    • upierdliwość CORS w połączeniu z XHR - działa dopiero po umieszczeniu pliku HTML w katalogu resources mojej aplikacji -> muszę resetować aplikację po wprowadzeniu zmian w HTML... Poza tym nie chcę, żeby front i backend były ze sobą tak mocno związane - chcę mieć dwa osobne repozytoria

Tak więc skłaniam się mimo wszystko w stronę JWT. Przeoczyłem coś ważnego w punktach wyżej? Czego byście użyli, pisząc własny projekt? Z czym się częściej spotykacie np. w pracy?

Akurat CSRF może wystąpić, poprzez źle napisany front i też może przyczynić się do nieprawidłowego działania apki. Zobacz sobie chociażby ataki na oauth2

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0