Я устанавливаю сервер подключения OAuth2 + OpenID, используя Spring Security.Я пытался использовать автоматические / oauth / token & / oauth / authorize конечные точки, которые определяются при использовании аннотации @EnableAuthorizationServer для класса.
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter{
В том же классе я автоматически подключил AuthenticationManager для использования при настройке AuthorizationServerEndpointsConfigurer.Я отладил и подтвердил, что правильный bean-компонент подключается автоматически.
@Autowired
private AuthenticationManager authMan;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints)
throws Exception{
endpoints
.tokenStore(tokenStore())
.userApprovalHandler(userApprovalHandler())
.authenticationManager(authMan);
}
Проблема в том, что создаются два WebSecurityConfigure, один из которых я определил, и который выглядит как WebSecurityConfigurer по умолчанию.Вот часть того, что я определил:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private UserDetailsSrvc detailsSrvc;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authProvider
= new DaoAuthenticationProvider();
authProvider.setUserDetailsService(detailsSrvc);
authProvider.setPasswordEncoder(passwordEncoder());
return authProvider;
}
@Autowired
protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}
@Override
@Bean(name="myAuthenticationManager")
public AuthenticationManager authenticationManagerBean() throws Exception {
return authenticationManager();
}
К сожалению, при переходе на localhost: 8080 / outh / token с моим браузером вызывается значение по умолчанию.Я могу сказать, потому что мой пользовательский UserDetailsService не используется во время аутентификации, и потому что я поставил точку останова на метод getWebSecurityConfigurers в org.springframework.security.config.annotation.web.configuration.AutowiredWebSecurityConfigurersIgnoreParents:
* В карте beansOfType есть две записи, но только если у меня есть класс с аннотацией @EnableAuthorizationServer.(Только 1, если я закомментирую аннотацию)
Как мне получить мой AuthorizationServerConfigurerAdapter (или что-то еще, фактически обрабатывающее запросы к / oauth / token), чтобы использовать WebSecurityConfigurer, определенный в моем WebSecurityConfigurerAdapter?Я считаю, что могу обойти эту проблему, определив свои собственные конечные точки, и, возможно, это единственное решение, но я надеялся использовать конечные точки по умолчанию.