Как получить данные пользователя в бэк-энде от токена на предъявителя, отправленного из фронт-энда - PullRequest
0 голосов
/ 08 мая 2019

У меня есть внешнее приложение в angular, которое регистрирует пользователя, используя oauth2.

Как только пользователь вошел в систему, каждый запрос API к серверной части (приложение Spring Boot) содержит заголовок с токеном-носителем в нем.

В серверной части я хотел бы получить этот заголовок и использовать его для вызова security.oauth2.resource.user-info-uri= для получения сведений о пользователе.

Моя конечная цель - извлечь имя пользователя, которое используется в моем бэк-энде для входа в целях DDBB.

Я попытался настроить WebSecurityConfigurerAdapter с PrincipalExtractor, но, похоже, он не работает.

@Configuration
@EnableOAuth2Sso
public class OAuthConfiguration extends WebSecurityConfigurerAdapter {

     @Bean
        public CorsConfigurationSource corsConfigurationSource() {
            CorsConfiguration configuration = new CorsConfiguration();
            configuration.setAllowedOrigins(Arrays.asList("*"));
            configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
        configuration.setAllowedHeaders(Arrays.asList("content-type", "Authorization"));
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", configuration);
            return source;
        }

    @Bean
    public PrincipalExtractor fixedPrincipalExtractor() {
        return new FixedPrincipalExtractor();
    }

    @Bean
    public AuthoritiesExtractor fixedAuthoritiesExtractor() {
        return new FixedAuthoritiesExtractor();
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().authorizeRequests().anyRequest().authenticated()
                .and().csrf().disable();
    }

}

Свойства как таковые:

#OAUTH Properties
#security.oauth2.client.clientId=xxxxxxx
#security.oauth2.client.clientSecret=xxxxxx
#security.oauth2.client.accessTokenUri=xxxxxxx
#security.oauth2.client.userAuthorizationUri=xxxxxxx
#security.oauth2.client.authenticationScheme=query
#security.oauth2.client.tokenName=authorization
#security.oauth2.client.clientAuthenticationScheme= form
security.oauth2.resource.user-info-uri=https://xxxxxxx/userinfo
spring.main.allow-bean-definition-overriding=true

Я ожидал, что Spring Boot получит заголовок токена и использует его при вызове security.oauth2.resource.user-info-uri, который затем даст мне пользовательские данные, которые основной перехватчик декодирует в объект Principal.

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