У меня есть 2 отдельных приложения Spring Boot, одно из которых служит сервером авторизации OAuth 2, а другое — сервером ресурсов. Я использую Spring RemoteTokenServices
на своем сервере ресурсов для проверки токенов с сервера авторизации. Теперь я пытаюсь определить код защищенного контроллера в своем приложении сервера ресурсов, но я не уверен, как сопоставить класс UserDetails
с принципалом аутентификации, предоставляемым через механизм OAuth 2.
Я настроил свой сервер авторизации с пользовательским TokenEnhancer
, который добавляет больше деталей к токену, так что /oauth/check_token?token=<token>
возвращает с настраиваемыми полями, которые я хочу сопоставить с контроллерами моего сервера ресурсов.
В более монолитной конфигурации, где сервер авторизации также является сервером ресурсов, я могу определить методы контроллера, использующие аутентифицированного принципала, следующим образом:
//User implements UserDetails
public Map<String, Object> getResource(@AuthenticationPrincipal User user) {
//code that uses the user object
}
Однако это, кажется, не работает так же прямо в более распределенном подходе. Сопоставление завершается ошибкой, и параметр user
оказывается нулевым объектом. Я попытался использовать следующий подход:
public Map<String, Object> getResource(Authentication authentication) {
//code that uses the authentication object
}
Хотя приведенный выше код успешно сопоставляет детали аутентификации, он не дает мне прямого доступа к пользовательским полям, которые я установил с помощью TokenEnhancer
, о котором я упоминал ранее. Кажется, я не могу найти что-либо в документах Spring по этому поводу.