Flow jest nastęujący:
- Uderz do REST API bez tokenu JWT
- Odczytaj z nagłówków adres serwera uwierzytelniania
- Uwierzytelnij za pomocą OpenID - sposób client credentials
- Uderz do REST API już z tokenem JWT
W Springu samo pobieranie tokenu po uprzedniej konfiguracji wygląda tak:
Natomiast same wywołania REST API zewnętrznej usługi. Pierwszy pomysł to RestTemplate + opcjonalnie Feign. Na powyższej stronie jest przykład z WebClient, lecz aktualnie nie używam reaktywnego flow w aplikacji (tutaj chyba nie ma to znaczenia - można użyć WebClient).
Spring ma też słabo udokumentowany OAuth2RestTemplate.
Ale teraz pytanie:
- Czy użycie do tego Springa to dobry pomysł, czy użyć zewnętrznych bibliotek, które są bardziej intuicyjne?
- Czy da się zrobić to prościej (w Springu lub innymi bibliotekami)?
- Czy da się automatycznie obsłużyć odczytywanie URL serwera uwierzytelniania, czy trzeba obsłużyć to ręcznie?
Nie pisałem jeszcze klienta z użyciem OAuth i nie wiem, ile rzeczy Spring umie zrobić z automatu, a ile trzeba ręcznie pisać logiki.
Spring obsługuje też refresh tokeny, a czy sam je umie odświeżać, czy też robimy to ręcznie? Słabo to wszystko udokumentowane.
Jeśli trzeba to ręcznie obsłużyć, to może to być taki flow:
- Wykonaj żądanie (nieważne, czy mamy token, czy nie - jak mamy, to go dołączamy)
- Jeśli aplikacja zwróci 401, to powinniśmy dostać w nagłówku adres serwera uwierzytelniania
- Uwierzytelniamy się pod tym adresem sposobem client credentials (client ID + hasło)
- Jak dostaniemy token, to trzeba go gdzieś przechować (Spring ma do tego komponent)
- Uderzamy do API już z tokenem (czasami trzeba go będzie odświeżyć)