К сожалению, у меня нет полного ответа, только некоторые части:
Как только токен JWT станет доступным для прокси-сервера zuul, каждый микросервис сможет авторизовать запросы, настроив свой сервер ресурсов, например,
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().anyRequest().access("#oauth2.hasScope('microserviceA.read')").and()
.csrf().disable()
.httpBasic().disable();
}
Области могут управляться микросервисом oauth с базой данных - на основании учетных данных клиента он будет получать информацию об областях и кодироваться в токен JWT.
Чего я не знаю в данный момент - как заставить прокси-сервер zuul использовать учетные данные «веб-клиента» для авторизации с помощью oauth - я не хочу жестко кодировать учетные данные прокси-сервера zuul, потому что тогда кредиты клиентов не будут использоваться.
Я только что опубликовал похожий вопрос на эту тему:
Авторизация запросов через весенний шлюз с zool через oauth-сервер
обновление:
Я нашел статью, описывающую почти эту конфигурацию (без эврики, но это не добавляет особой сложности из моего опыта): https://www.baeldung.com/spring-security-zuul-oauth-jwt, есть проект github с исходным кодом. К сожалению, исходный код не отшлифован, поскольку автор использует его для своих коммерческих курсов.
Но мне удалось собрать из его примеров рабочий набор.
Резюме: в описанной архитектуре каждый сервер ресурсов (микросервис A, B, ..) получает токен JWT, пересылаемый прокси / шлюзом zuul от запрашивающего клиента. Токен передается в заголовке запроса. Если действительный токен не предоставлен, шлюз перенаправит запрос на страницу авторизации.
Также каждый сервер ресурсов может проверять токен с помощью службы oauth и, при необходимости, выполнять проверку области, как я писал выше.