Spring Oauth2 настраивает конечные точки авторизации - PullRequest
0 голосов
/ 04 июня 2018

У меня есть веб-приложение Spring с REST WS, созданное с использованием spring-security-oauth2: 2.3.3 и spring-boot-starter-security: 2.0.2.Но я не могу установить, какие конечные точки защищены.

ResourceServerConfig

@EnableResourceServer
@Configuration
public class ResourceServerConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/", "/customers", "/v2/**").permitAll()
                .antMatchers("/api/**").authenticated();
    }

    @Bean
    public AuthenticationManager authenticationManager(AuthenticationProvider authenticationProvider) {
        return new CustomAuthenticationManager(authenticationProvider);
    }

    @Bean
    public AuthenticationProvider authenticationProvider(UserRepository userRepository, PasswordEncoder passwordEncoder) {
        return new DBAuthenticationProvider(userRepository, passwordEncoder);
    }

}

AuthorizationServerConfig

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) {
        security.checkTokenAccess("isAuthenticated()");
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
                .inMemory()
                .withClient("ClientId")
                .secret("secret")
                .authorizedGrantTypes("password")
                .scopes("read", "write");
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.authenticationManager(authenticationManager);
    }
}

Когда я сначала получаю токен доступа, все работает отлично, но я ожидаю, что конечные точки "/", "/ Customers", "/ v2 / **" будут разрешены для всех без какой-либо авторизации.Но когда я вызываю 'curl http://{{host}}/' или http://{{host}}/customers, я все равно получаю 401:

{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}

, добавление "--header" Авторизация: Basic {{base64 client id: password}} "тоже не помогает.Как это возможно?

РЕДАКТИРОВАТЬ в соответствии с пружинным разрешением безопасности. Все еще учитывает токен, переданный в заголовке авторизации, и возвращает 401, если токен недействителен , решено добавлением @Order (1) в ResourceServerConfig для переопределения OAuth2 по умолчанию. Но это должно срабатывать только при добавлении заголовка «Авторизация», что не в моем случае. Так как это возможно?

...