Клиент Spring Boot OAuth 2.0 (с JWT) - PullRequest
0 голосов
/ 05 ноября 2018

Учитывая топологию:

  • Веб-сервис A (Сервер ресурсов A)
  • Веб-служба B (Сервер ресурсов B)
  • Webservice C (клиент A & B)
  • Служба аутентификации (провайдер JWT)

Намерение: C использует OAuth 2.0 Client Credentials для извлечения данных из сервисов A и B (оркестровка).

C реализован как приложение Spring Boot.

Есть ли лучше практика, чем:

  • Написать сервис (назовем его JwtManagementService), у которого запланированное выполнение (каждые 30 с)
  • Проверьте, присутствует ли действительный JWT
    • Если нет: запросить новый JWT из службы аутентификации с токеном обновления или учетными данными клиента
    • Сохраните его в (распределенном) кэше
  • После создания (REST) ​​запроса к любому из ресурсов A или B прочитайте кэшированный JWT (оптимистично, всегда будет действительный JWT)
  • Внедрить / использовать JWT в вызове REST (используя RestTemplate, WebClient, Feign, ...)

Я бы использовал такой JwtManagementService, потому что:

  • Асинхронность между ним и каждым обращением к бэкэндам гарантирует, что существует только один запрос, если отсутствует допустимый JWT. В противном случае 50 параллельных запросов могут привести к 50 запросам JWT и / или заблокировать текущий поток.
  • Служба может осуществлять вызовы к различным службам аутентификации и действовать как фасад для своих клиентов.

Недостатком является то, что мне нужно было бы реализовать это самостоятельно.

Если я на правильном пути, мне было бы интересно узнать, есть ли что-то, что может предложить структура. Я немного обеспокоен объявлением 1055 * spring-security-oauth, которое теперь находится в режиме обслуживания. Кроме того, я не думаю, что я первый, кто ищет такое решение.

...