Spring OAuth czy inne biblioteki - zmienny adres serwera uwierzytelniania

0

Flow jest nastęujący:

  1. Uderz do REST API bez tokenu JWT
  2. Odczytaj z nagłówków adres serwera uwierzytelniania
  3. Uwierzytelnij za pomocą OpenID - sposób client credentials
  4. Uderz do REST API już z tokenem JWT

W Springu samo pobieranie tokenu po uprzedniej konfiguracji wygląda tak:

https://docs.spring.io/spring-security/site/docs/5.2.12.RELEASE/reference/html/oauth2.html#using-the-access-token

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:

  1. Czy użycie do tego Springa to dobry pomysł, czy użyć zewnętrznych bibliotek, które są bardziej intuicyjne?
  2. Czy da się zrobić to prościej (w Springu lub innymi bibliotekami)?
  3. 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:

  1. Wykonaj żądanie (nieważne, czy mamy token, czy nie - jak mamy, to go dołączamy)
  2. Jeśli aplikacja zwróci 401, to powinniśmy dostać w nagłówku adres serwera uwierzytelniania
  3. Uwierzytelniamy się pod tym adresem sposobem client credentials (client ID + hasło)
  4. Jak dostaniemy token, to trzeba go gdzieś przechować (Spring ma do tego komponent)
  5. Uderzamy do API już z tokenem (czasami trzeba go będzie odświeżyć)
0

Wybór frameworka to jest szczegół. Jeśli w całym projekcie pożeniliście się ze springiem to kontynuuj.

0

Nie chodzi o sam framework, ale o biblioteki do uwierzytelniania. Na razie spróbuję to zrobić za pomocą Spring Security.

RestTemplate mają niedługo usunąć na rzecz WebClient. Kolejny moduł do dodania do pom.xml. Bardziej zależy mi na tym, żeby aplikacja nie rozrosła się zbytnio, bo na serwerze po odpaleniu wszystkich usług (w tym ElasticSearch) już mało RAM-u zostało. Ale patrząc naprzód, to lepiej używać tego, co będzie wspierane.

1
Shiba Inu napisał(a):
  1. Jeśli aplikacja zwróci 401, to powinniśmy dostać w nagłówku adres serwera uwierzytelniania

A dlaczego tak? Jeszcze chyba się nie spotkałem z taką implementacją ;)
Czemu adres serwera autoryzacyjnego miałby się zmieniać?

0

Ale o który z tych endpointów pytasz? Bo pisanie wszystkiego od początku samodzielnie to trochę bez sensu jest.

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