Я настраиваю автономный сервер ресурсов OAuth2 и, похоже, не выполняет проверку подлинности запросов, используя вызовы CURL без токена-носителя, как представляется, все равно успешно. Кроме того, я пытался создать глобальный метод безопасности и все запросы отклонены с ошибкойСервер ресурсов OAuth2 не выполняет проверку подлинности
An authentication object could not be found in the current security context
даже если @PreAuthorize('submitAll()')
установлен по просьбе в вопросе. Я с удовольствием беру любой путь к получению проверки подлинности (безопасность уровня метода или правильная конфигурация, которая будет проверять токены).
Вот код.
@Configuration
@EnableResourceServer
@EnableWebSecurity
class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Bean
public ResourceServerTokenServices tokenService() {
RemoteTokenServices tokenServices = new RemoteTokenServices();
tokenServices.setClientId("commsuite");
tokenServices.setClientSecret("secret");
tokenServices.setCheckTokenEndpointUrl("http://localhost:10386/oauth/check_token");
return tokenServices;
}
@Bean
public AuthenticationManager authenticationManager() {
final OAuth2AuthenticationManager oAuth2AuthenticationManager = new OAuth2AuthenticationManager();
oAuth2AuthenticationManager.setTokenServices(tokenService());
return oAuth2AuthenticationManager;
}
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.tokenServices(tokenService()).authenticationManager(authenticationManager());
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/2/**").authorizeRequests().anyRequest().authenticated();
}
}
/* Here is the api controller code with the call */
@RequestMapping(value="/test", method = RequestMethod.GET, produces = {"text/plain"})
@ResponseStatus(HttpStatus.OK)
public @ResponseBody
String testEndpoint() {
return "Gnarly Dudes\n";
}
В этом случае неудачный вызов локоть без маркера-носителя.
В качестве второго случая я попытался использовать аннотации безопасности уровня метода, добавив следующий код, а затем добавив @PreAuthorize("permitAll()")
к методу testEndpoint
выше. В этом случае я получаю ошибку Authentication object could not be found
как в необработанном вызове CURL, так и при использовании вызова с допустимым маркером-носителем, полученным с отдельного сервера проверки подлинности. Я подозреваю, что у меня что-то пропало. Спасибо ...
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
return new OAuth2MethodSecurityExpressionHandler();
}
}