У меня есть внешнее приложение в 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
.