0

Я настраиваю автономный сервер ресурсов 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(); 
    } 
} 

ответ

0

Ваш код работает для меня после добавления

`общественный класс AppSecurityInitializer расширяет AbstractSecurityWebApplicationInitializer {

}`

Пустой класс только для того, чтобы продлить весеннюю безопасность