Spring Security с OAuth2 и анонимным доступом - PullRequest
0 голосов
/ 29 июня 2018

У меня есть Spring REST API, защищенный с помощью Spring Security и OAuth2, я могу успешно получить токен и получить доступ к своим API. Мое приложение определяет самого клиента OAuth2.

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

Вот мой WebSecurityConfigurerAdapter пока:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.antMatcher("/api1").anonymous().and()
            .authorizeRequests().antMatchers("/ap2**").permitAll();
}

Как только я добавляю второй antMatcher / anonymous, он не работает, хотя и не выражает мои намерения - например, Я не хочу иметь анонимный доступ к api1 GET, но аутентифицируюсь на POST (это легко сделать с помощью @PreAuthorize).

Как я могу сделать аутентификацию OAuth2 необязательной?

1 Ответ

0 голосов
/ 29 июня 2018

Я бросил свой @EnableWebSecurity и использовал ResourceServerConfigurerAdapter вот так:

@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers(HttpMethod.GET, "/api/api1", "/api/api2").permitAll()
                .and().authorizeRequests()
                    .anyRequest().authenticated();
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId("my-resource-id");
    }
}

/api/api1 теперь можно вызывать с аутентификацией или без нее.

...