UserDetailsService не учитывается при использовании @ EnableOAuth2Sso и @EnableResourceServer - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть @ EnableOAuth2Sso в моем классе Application, один WebSecurityConfigurererAdapter с @EnableWebSecurity и один ResourceServerConfigurerAdapter с @ EnableResourceServer.

Приложение:

@SpringBootApplication
@EnableCaching
@EnableOAuth2Sso
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

* 100S

1006 *:1008 * ResourceServerConfigurerAdapter:
@Configuration
@EnableResourceServer
public class ResourceServerOktaConfig extends ResourceServerConfigurerAdapter {

    @Bean
    public RequestContextListener requestContextListener() {
        return new RequestContextListener();
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .requestMatcher(new RequestHeaderRequestMatcher("Authorization"))
                .authorizeRequests().anyRequest().fullyAuthenticated();
    }

}

Теперь я ожидал, что моя служба пользовательских данных пользователя будет учтена, но это не так.

Существует способ ввести пользовательские данные пользователяобслуживать, переопределяя конвертер и устанавливая его в конвертере токенов пользователя, но это переопределяет конфигурацию по умолчанию и создает довольно сложный код, как показано здесь:

@Configuration
@EnableResourceServer
public class ResourceServerPingConfig extends ResourceServerConfigurerAdapter {

    @Autowired
    PingFederateAccessTokenConverter converter;

    @Autowired
    CustomUserDetailsService customUserDetailsService;

    @Override
    public void configure(ResourceServerSecurityConfigurer config) {
        config.tokenServices(tokenServices()).resourceId("swissre");
    }

    @Bean
    @Primary
    public DefaultTokenServices tokenServices() {
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStore());
        return defaultTokenServices;
    }

    @Bean
    public TokenStore tokenStore() {
        DefaultUserAuthenticationConverter userAuthConverter = new DefaultUserAuthenticationConverter();
        userAuthConverter.setUserDetailsService(customUserDetailsService);
        DefaultAccessTokenConverter accessTokenConverter =
                (DefaultAccessTokenConverter) converter.getAccessTokenConverter();
        accessTokenConverter.setUserTokenConverter(userAuthConverter);
        return new JwtTokenStore(converter);
    }

    @Bean
    public RequestContextListener requestContextListener() {
        return new RequestContextListener();
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .requestMatcher(new RequestHeaderRequestMatcher("Authorization"))
                .authorizeRequests().anyRequest().fullyAuthenticated();
    }

}

Теперь мой вопрос: кто-то там указывает на возможную ошибку- С моей стороны, или просто лучший, более простой способ внедрить службу сведений о пользователе при использовании конфигурации сервера ресурсов?

Добавление:

Я понял, что я должен добавить конфигурацию OAuth2:

security:
  oauth2:
    client:
      client-id: xxxxx
      client-secret: yyyy
      access-token-uri: https://dev-aaaaaa.oktapreview.com/oauth2/default/v1/token
      user-authorization-uri: https://dev-aaaaaa.oktapreview.com/oauth2/default/v1/authorize
      scope: openid profile email
    resource:
      user-info-uri: https://dev-aaaaaa.oktapreview.com/oauth2/default/v1/userinfo
      token-info-uri: https://dev-aaaaaa.oktapreview.com/oauth2/default/v1/introspect
      prefer-token-info: false
...