Spring Oauth Получить текущего пользователя - PullRequest
0 голосов
/ 27 августа 2018

Я разрабатываю систему с тремя небольшими проектами:

  • клиент
  • сервер ресурсов
  • сервер аутентификации

Сервер аутентификации имеет регистр и страницу входа. Сервер ресурсов защищен сервером аутентификации.

С клиента я хочу получить доступ к ресурсу через REST API. Клиент обращается к серверу ресурсов через OAuth2RestTemplate из Spring для доступа к ресурсу. Мне удалось получить доступ к ресурсу после проверки подлинности.

Теперь к проблеме. На клиенте мне нужно знать текущего пользователя, чтобы отобразить имя пользователя и позволить пользователю изменить свой профиль.

Я пытался получить доступ к принципалу пользователя через Spring Security с

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

но он только что вернулся null. Итак, мой вопрос: есть ли способ получить текущего вошедшего в систему пользователя с помощью OAuth2RestTemplate?

Edit:

Поэтому я решил изменить план, добавив ссылку на мой сервер аутентификации, которая возвращает информацию о пользователе. Проблема в том, что когда я хочу поговорить с сервером аутентификации через OAuth2RestTemplate, сервер аутентификации просто возвращает страницу входа в систему. Все работает нормально, когда я вызываю страницу из браузера или когда я хочу поговорить с сервером ресурсов через OAuth2RestTemplate.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Установите TokenEnhancer на свой AuthorizationServerEndpointsConfigurer на сервере авторизации. Вы можете добавить информацию о пользователе в токен в качестве дополнительной информационной карты.

Вот пример реализации пользовательского TokenEnhancer,

    public class CustomTokenEnhancer implements TokenEnhancer {

    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {

        final Map<String, Object> additionalInfo = new HashMap<String, Object>();
        UserDetails user = (UserDetails) authentication.getPrincipal();

        additionalInfo.put("<custom_user_info>", user.getUsername());

        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);

        return accessToken;
    }

}

На вашем сервере авторизации

public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.tokenEnhancer(new CustomTokenEnhancer());
    }
0 голосов
/ 27 августа 2018

Добавление объекта аутентификации в держатель контекста безопасности после успешной аутентификации путем переопределения метода класса AbstractAuthenticationProcessingFilter

    public void successfulAuthentication(
    HttpServletRequest request,
    HttpServletResponse response,
             FilterChain chain, 
            Authentication authentication) throws IOException, ServletException

                 {
             // Add the authentication to the Security context 
   SecurityContextHolder
.getContext()
.setAuthentication(authentication); 

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...