После прочтения статьи Как контролировать личность пользователя В микросервисах я пытался реализовать такую схему управления доступом (значения и ссылочные токены), но после ознакомления с множеством других тем и примеров в GitHub, связанных с Spring Security + OAuth + Zuul, я не смог найти конкретных примеров того, как этого можно достичь. Все примеры, в которых используется JWT, возвращают сведения о пользователе при возврате токена, и именно этого я бы хотел избежать. Сведения о пользователе никогда не должны доходить до Клиента напрямую, а должны передаваться серверным службам. Учебник Spring Security + AngularJs содержит много информации о том, как преобразовать приложение в безопасное, но использует токен доступа или упоминает возможность получения сведений о пользователе напрямую через JWT.
Этот вопрос SO, Использование Zuul в качестве шлюза аутентификации от @ phoenix7360, это именно тот подход, который я пытался реализовать, но он предоставляет лишь краткий обзор конфигурации, необходимой для реализации такого подхода к безопасности для микросервисы. Пожалуйста, обратитесь к изображению в этом вопросе, чтобы получить четкое представление о том, как это будет происходить.
Я не могу полностью понять, как следует настроить предварительный фильтр Zuul и как должна выглядеть конфигурация сервера авторизации. Как указано как в статье, так и в вопросе SO, поток будет примерно таким:
Внешний (HTTPS)
- Клиент аутентифицируется на сервере OAuth2.
- Сервер OAuth возвращает непрозрачный токен доступа (UUID без другой информации)
- Клиент отправляет запрос на шлюз API с токеном доступа в заголовке авторизации.
- Шлюз API запрашивает сведения о пользователе на сервере OAuth с помощью токена доступа в заголовке авторизации.
- Сервер OAuth проверяет, что токен доступа действителен, и возвращает информацию о пользователе в формате JSON.
Внутренний (HTTP / S)
- API Gateway создает JWT с данными пользователя и подписывает его закрытым ключом.
- API-шлюз добавляет JWT для запроса и перенаправляет его на сервер ресурсов.
- Сервер ресурсов проверяет JWT с помощью открытого ключа API Gateway.
Примечание. Шлюз API должен возвращать ошибку, если сервер OAuth указывает, что токен доступа больше не действителен.
Как будет работать ZuulFilter? Требуется ли новый запрос к серверу OAuth (например, через RestTemplate), или эти схемы поддерживаются текущей реализацией? Требуется ли какая-либо конкретная конфигурация для классов JavaConfig как для OAuth, так и для Zuul? Если кто-то знает рабочий пример, он был бы действительно полезен и был бы отличным справочником по этой теме в будущем.
Я использую Spring Boot (1.4.0-M3) + Spring OAuth + Spring Cloud (Eureka, Ribbon, Zuul)
Я знаю, что этот вопрос очень похож на тот, который был связан ранее, и если это неправильный способ сделать это, я прошу прощения, но я подумал, что новый поток будет лучше, чем просить помощи в потоке SO, который направлен на решение другой проблемы .
Заранее спасибо!