Połączenie Spring - frontend

0

Hejka!

Pytanie z tych o których można się rozpisywać, ale potrzebuję pomocy :(
Zaczynam robić aplikację typu REST w Springu wraz z Security oraz prosty frontend w HTML, CSS i StimulusJS (ewentualnie jakiś inny bieda framework js z minimalnym nakładem pracy).
Zastanawiam się jak powinny wyglądać połączenia i jak dokonać autentykacji/autoryzacji.

Zakładam, że korzystam z Basic Auth.
Załóżmy, że mam endpoint /login, który przyjmuje login i hasło w Base64 w headerze. Ja dokonuję magii, ustalam czy credentials są ok i...
Co robię? Jaki jest schemat działania? Zwracam jakiś token? JWT? Jak długo taki token powinien być ważny? Jak sprawdzać w następnych callach na inne endpointy czy użytkownik dokonał autentykacji i czy posiada uprawnienia do następujących zasobów? Robię to rolami w springu?

Help me out here, brodzę w bagnie dezinformacji.
Wiem, że temat dla noobów, więc liczę na jakieś linki, które trochę rozjaśnią architekturę Spring REST - frontend.

0

To zależy w jakim celu chcesz to zrobić? Chcesz się nauczyć i zrozumieć, czy zrobić na szybko aplikację? Jeżeli to 1 to musisz poczytać dokładnie dokumentację Spring Security + wybranego frameworku/platformy frontendowej, poczytać o JWT, gdzie przetrzymywać tokeny (cookies vs local vs sessios storage), protokole HTTP(bezstanowość), XSS, CSRF, CORS i tak dalej i tak dalej.

Jeżeli to drugie to wystarczy wpisać np: Angular, JWT, Spring authentication example w google i zrozumieć kod - zazwyczaj przykłady pokazują bardzo proste warianty i przykłądy, które łatwo zrozumieć.

0

Masz kilka rodzajów autentykacji:

  • basic
  • session-based
  • JWT

Każde z nich możesz skonfigurować w springu, ale nie wszystkie naraz. Wybiesz jedno, wybierz mądrze. I nie mieszaj basica z JWT, to zupełnie inne rodzaje uwierzytelniania

0

W czystym Basic Auth Spring posiada filtr BasicAuthenticationFilter,
który autoryzuje na podstawie danych w headerze Authorization: Basic <base64_encoded_credentials>.
a także UsernamePasswordAuthenticationFilter, który autoryzuje na podstawie danych w POST /login (username, password)
zakodowanych w x-www-form-urlencoded. Spring domyślnie tworzy sesje, ustawia w cookie id sesji, kolejne requesty
nie potrzebują już się "autoryzowac". W Springu raczej nie trzeba pisać własnych endpointow do logowania, jest to raczej
ogrywane przez odpowiednią konfigurację + dostarczenie własnej implementacji UserDetailsService, która sprawdza
czy dane logowania się zgadzają np. stzelajac do bazy. Inaczej jakbyś miał wydzielony serwer autoryzacji.
Co do autoryzacji tokenem (niekoniecznie JWT) flow jest takie, że robisz POST request zwykle pod /oauth/token
przesyłasz w headerze Authorization: Basic <client_id:client_secret> oraz w parametrach http username=test&password=test
zakodowane w url lub jako x-www-form-urlencoded i w odpowiedzi dostajesz token, który wykorzystujesz w kolejnych requestach
podając go w headerze Authorization: Bearer <token>.

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