У меня есть веб-приложение 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 по умолчанию. Но это должно срабатывать только при добавлении заголовка «Авторизация», что не в моем случае. Так как это возможно?