В моем устаревшем проекте время до этого использовался сервер авторизации. Сервер является обязательным для использования некоторыми службами области.
Сейчас я разрабатываю новый клиент \ пользовательский сервис - сервер ресурсов ( RS ). Сервер ресурсов должен быть интегрирован с apigee для поддержки внешних клиентов. Интеграция безопасности реализована через OAuth2-JWT . Почти все необходимые элементы были использованы из коробки решений Spring Security.
Следующим шагом является добавление SSO-авторизации для внутренних пользователей. Сервер авторизации SSO является устаревшим внутренним сервером безопасности. Я могу обработать все необходимые запросы к серверу единого входа, чтобы получить необходимые данные пользователя и создать принципал, заключенный в UsernamePasswordAuthentificationToken
, регистрируя один в контексте сеанса безопасности для этого. Ожидается, что все дополнительные запросы будут успешно обработаны с использованием authorities
, указанного в UsernamePasswordAuthentificationToken
, но контекст безопасности пуст. В случае, если без настройки ресурсного сервера с безопасностью apigee, он работает нормально.
Учитывая это, давайте проверим фильтры, используемые в потоке (не все, но наиболее интересные для нас): - SecurityContextPersistenceFilter
; - OAuth2AuthentificationProcessingFilter
- добавляет OAuth2Authentication
объект в контекст безопасности; - CustomSsoFilter
- добавляет UsernamePasswordAuthentificationToken
объект в контекст безопасности; - AnonimousAuthentificationFilter
- в случае отсутствия объекта аутентификации в контексте безопасности он добавляет анонимный.
Я обнаружил, что SecurityContextPersistenceFilter
очищает контекст безопасности в конечном блоке. Также OAuth2AuthentificationProcessingFilter
очищает контекст безопасности Spring в случае, если сеанс не имеет состояния и токен авторизации отсутствует.
Во-первых, моей идеей было настроить CustomOAuth2AuthentificationProcessingFilter
и, возможно, CustomAuthentificationManager
для подавления отрицательного эффекта OAuth2AuthentificationProcessingFilter
, но в этом Способ 2 проблемы для меня: я не знаю, как удалить фильтр из коробки потока.
Вопросы (2 вопроса, но требуется ответ на любой из них):
- Как контроль удаляет некоторые фильтры из потока безопасности (обеспечивается автоматической настройкой весенней загрузки) - это помогает закрыть вопрос, следуя моему уродливому пути ...
- Как настроить 2 различные цепочки ответов веб-фильтров для каждого потока безопасности (SSO & OAUTH) на том же сервере ресурсов