Ostatnio zainteresowałem się tematem security i próbuję zrozumieć temat oauth 2.
Jeśli coś pomieszałem to proszę mnie poprawić.
(Aplikacja kliencka - moja aplikacja którą piszę.)
Jeśli użytkownik próbuje uzyskać dostęp do jakiegoś zasobu np. test.pl/zasob1 to:
- zostanie przekierowany do serwera autoryzującego w celu zalogowania się np. logując się swoim kontem gmail.
- Serwer autoryzujący w odpowiedzi przekaże autorization code aplikacji klienckiej.
- Aplikacja kliencka wyśle Autorization code do serwera zasobów (resource server i autorization serwer może być tym samym bytem?) i wymieni go na token.
- Za każdym razem jak uwierzytelniony już użytkownik będzie próbował dostać się do zasobu w requescie zostanie przesłany również token.
- Aplikacja kliencka za każdym razem wyśle żądanie do serwera wydającego token np. google sprawdzając czy token jest poprawny oraz ważny.
- Jeśli wszystko jest okey to użytkownik otrzyma dostęp do zasobu.
Można wykorzystać JWT (JSON Web token) w aplikacji i dzięki temu aplikacja sama sprawdzi czy token jest poprawny i dalej ważny. Nie musi odpytywać za każdym requestem do swoich zasobów o to serwera autoryzacyjnego.
Moje pytanie brzmi.
- Czy dobrze rozpisałem powyższy flow.
- Po co dostawać autorization code i wymieniać go na token? Co to daje i czemu od razu nie dostaje się tokena?
- Co w przypadku komunikacji wewnętrznej pomiędzy mikro serwisami? Pomijają punkt z uwierzytelnianiem (kim jesteś?) i tylko wystawiają sobie na wzajem token?