Spring EnableAuthorizationServer с пользовательским AuthenticationManager - PullRequest
0 голосов
/ 25 января 2019

Я устанавливаю сервер подключения 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?Я считаю, что могу обойти эту проблему, определив свои собственные конечные точки, и, возможно, это единственное решение, но я надеялся использовать конечные точки по умолчанию.

...