Я использую SpringBoot 2.0.5 и Spring Security OAuth для реализации сервера OAuth 2.0 и набора клиентских микросервисов.
В AuthServer:
- Я реализовал
UserDetailsService
, чтобы я мог предоставить свой пользовательский обогащенный принципал. - Для конечной точки контроллера
userInfoUri
я возвращаю пользователя (моего принципала) и полномочия в виде карты.
В клиенте:
- Я реализовал
PrincipalExtractor
для извлечения и создания своего собственного принципала. Для каждого из методов, которые мне требуются, я использую следующие обозначения:
public List<Message> listMessages(@AuthenticationPrincipal MyPrincipal user)
Это работает (и я надеюсь, что это правильный путь), но теперь у меня возникла проблема с безопасными методами с использованием областей.
Например, если я хочу иметь метод контроллера, доступный только другому серверу (используя client_credentials), я помечаю метод следующей аннотацией:
@PreAuthorize("#oauth2.hasScope('trust')")
Но это приводит кв ошибке доступа, поскольку я думаю, что область не передается.Я добавил область к конечной точке userInfoUri
, но не уверен, что мне нужно делать на стороне клиента, чтобы область была выбрана.
Любые указатели или примеры кода будут очень благодарны.