@Riddle dziękuję za odpowiedź
Chciałbym jednak mieć te JWT, a czy powinienem stosować refresh tokeny i jak to dobrze zaimplementować?
Ale masz jakiś powód ku temu?
Rozwiązania się dobiera do problemu - masz jakąś potrzebę, i znajdujesz rozwiązanie (i takim rozwiązaniem może być JWT, może być oAuth, mogą być refresh tokeny, etc.). Ty, mam wrażenie, podchodzisz do tego odwrotnie - czyli jakbyś chciał zrobić coś po coś, ale nie do końca wiadomo co.
Access tokeny i refresh tokeny służą do tego, żeby źródło pozwoleń (w tym wypadku Twój user) mógł odebrać uprawnienie klientowi. Działa to tak, że klient mając access token może odbierać zasoby z servera, ten access token z reguły żyje krótko (30-60 minut), i potem musi użyć refresh tokena żeby dostać nowy access token. I jeśli nie masz innych potrzeb to nie potrzebujesz refresh tokena, po prostu zrób żeby access token żył długo (np rok), i po sprawie. Konieczność dwóch tokenów przychodzi dopiero wtedy kiedy chcesz odebrać klientowi jakieś prawo - wtedy edytujesz server w taki sposób żeby na dany refresh token już nie wysyłał kolejnego access tokena. W ten sposób mając dwa tokeny możesz "żądzić" kto i kiedy dostanie access token.
Przy czym, należy zauważyć że to nie jest jedyny sposób - bo można to samo ogarnąć jednym tokenem, np server może pamiętać który klient ma jaki access token, i na tej podstawie po prostu odmówić dostępu. Ma to taką wadę, że wtedy jest jakby więcej "points of failure", ale za to działa od razu. Dwa tokeny działają wolniej (bo trzeba poczekać aż ważność access tokenu się skończy), i dopiero potem klient traci dostęp.
Dodatkową zaletą dwóch tokenów, jest to że kiedy jakiś atakujący dostanie nasze tokeny - to access tokenu można użyć żeby "hackować", ale tylko przez krótkie okno, np 30 minut. Jeśli refresh token wycieknie, to raczej nic się z nim nie zrobi, bo hacker musiałby znać też clientId żeby dostać nowy access token - chyba że clientId też wycieknie, to wtedy po zawodach już i tak. Ale tak czy tak, i tak każdy ruch teraz leci po SSL, więc szansa że którykolwiek wycieknie jest bardzo mała.
Także moja rada - zastanów się co tak na prawdę chcesz zrobić. Na 99% nie potrzebujesz tego co próbujesz zrobić. Wygląda to bardzo jak przerost formy nad treścią. Jak widzisz, z oAuth2 jest dużo rzeczy które mogą pójść nie tak, więc zastanów się czy na pewno chcesz w to wchodzić.
Jeśli chcesz się po prostu "pobawić" z tokenami, to zrób sobie prostą integrację z jakimś systemem który z niego korzysta np Github, zamiast pisać swój server - napisanie klienta oAuth jest dużo łatwiejsze niż server - i dodatkowo ciężej zrobić jakąś fatalną katastrofę.