Cześć.
// tl;dr -> patrz tylko 2.
1. Zamierzam stworzyć web aplikację z wykorzystaniem Springa i AngularaJS. Od jakiegoś czasu kombinuję z jedną i drugą technologią testując jak działają różne rzeczy. Niedawno udało mi się wreszcie skonsumować resta, po tym jak doczytałem, że aplikację po stronie klienta wystarczy wrzucić do folderu webapp, gdzie spring boot domyślnie szuka pliku index.html (wiem, że można rozdzielić serwer z klientem (bodajże jakieś CORSy), ale dopiero uczę się tych technologii i naprawdę chcę przejść po linii najmniejszego oporu, systematycznie uzupełniając wiedzę, bo już nie raz się zaciąłem, chcą zrobić wszystko na raz). Aplikacja będzie wymagała utworzenia konta użytkownika (nawet bez maila, wystarczy username i password) i zalogowania się.
Googlowałem już na różny sposób tagi 'spring boot angularjs security' i znalazłem masę informacji (może aż za dużo?), w tym tutorial na stronie spring.io, ale albo instrukcje są dość chaotyczne, albo mało wyjaśniają, ewentualnie są niepełne, a czasem próbują zrobić wszystko na raz (autoryzacja w przypadku rozdzielenia modułu, jakaś własna baza tokenów itp itd), kiedy ja potrzebuję czegoś najprostszego, od czego mógłbym zacząć, dlatego zdecydowałem się (narażając na opinię człowieka, który nie umie szukać/korzystać z informacji z googla) poprosić o pomoc na 4p.
-----------------
2. Chciałbym się dowiedzieć, co mi będzie niezbędne do nauczenia się, poczytania w dokumentacji (może znacie jakieś konkretne linki albo już mieliście taki problem?), aby:
-
a) zabezpieczyć resty, a dokładnie, że dostęp do konkretnych ścieżek mogą mieć tylko użytkownicy z rolą USER / ADMIN / KTOŚ_TAM;
-
b) zrobić stronę logowania w Angularze (i umożliwyć wylogowanie się);
-
c) zrobić stronę rejestracji nowego użytkownika w Angularze i zapisać tego usera do bazy danych (z samą bazą umiem się połączyć);
-
d) móc przechowywać aktualnie zalogowanego użytkownika (żeby jak ten kliknie 'moje konto' to wyświetliły się dane właśnie z jego danymi; jakiś user_context czy coś);
O ile na 'a' znalazłem całkiem niemało informacji w necie, o tyle na 'b' już mniej, a na 'c' czy 'd' - w ogóle (przynajmniej opisanych w jakiś przystępny dla laika sposób).
Jak wspominałem, pragnę poznać najprostszy sposób. Co do 'c' to rozumiem, że wystarczy encja z nazwą użytkownika, hasłem i... no właśnie rolą czy rolami? W sensie jak ktoś jest adminem to automatycznie ma też w sobie rolę 'USER'? Muszę trzymać dwie role? Czy zaznaczyć w konfiguracji security, że dane ścieżki są dostępne dla 'USER' i 'ADMIN'? Jeśli tak, to pole 'role' powinno się trzymać jako String czy Enum?
-----------------
3. Przy okazji ciekawi mnie kilka rzeczy (jeśli ktoś jest w stanie odpowiedź w 2-3 zdaniach, przedstawić esencję problemu, zamiast odsyłać do kilkudziestu stron dokumentacji :)):
-
a) Jak to jest zrobione, że dwie oddzielne rzeczy (jakimi są serwis restowy i część po stronie klienta) są w stanie dbać o autoryzację?
-
b) Skąd serwer wie, że właśnie dany użytkownik jest właśnie zalogowany? Chodzi mi o to, że angular może rzucić GET na jakąś ścieżkę a serwer ma zwrócić np. jakiegoś JSONa, ale skąd wie, że to żądanie przyszło właśnie od takiego użytkownika z danymi uprawnieniami (skoro jak zdążyliśmy ustalić, te rzeczy są odrębne)?
-
c) I jak to jest, ze np. jak wyłączymy stronę i nie wrócimy na nią po chwili, to zostajemy wylogowani? Spring liczy jakoś czas 'nieaktywności' dla każdego zalogowanego użytkownika i np. po 'x' takich minutach automatycznie wylogowuje (chyba że zaznaczymy coś w rodzaju 'rememeber me')?
Po prostu chciałbym też nieco zrozumieć, a nie tylko bezmyślnie przepisywać kod.
Bardzo proszę o pomoc, chciałbym to zrozumieć i się tego nauczyć.