Spring security — 403 при вызове между службами

#java #spring #spring-boot #spring-security

Вопрос:

У меня проблемы с доступом на основе ролей безопасности Spring. У меня есть две услуги:

  • услуга А
  • служба B, которая извлекает данные из службы A

Оба они имеют такую конфигурацию:

 @Configuration @RequiredArgsConstructor public class WebSecurityConfig extends WebSecurityConfigurerAdapter {   private final ObjectMapper objectMapper;    @Override  protected void configure(HttpSecurity http) throws Exception {  http.csrf()  .disable()  .authorizeRequests()  .antMatchers("/some-servie-api-pattern/**")  .hasRole("USER_A")  .antMatchers("/whitelisted-api/**")  .permitAll()  .and()  .addFilterBefore(new SecurityFilter(objectMapper), BasicAuthenticationFilter.class);  } }  

SecurityFilter считывает роли в строке из заголовка like "USER_C, USER_A" и создает аутентификацию с SimpleGrantedAuthoirty помощью (по одной для каждой роли из заголовка). И затем:

  • когда я вызываю напрямую сервис API с заголовком "USER_C, USER_A" , все работает нормально
  • когда я вызываю API службы B, я получаю 403 от службы A. Когда я переупорядочиваю роли в заголовке "USER_A, USER_C" , он снова работает нормально.

Может ли кто-нибудь помочь в случае вызова службы A через службу B и получения запрета?

ИЗМЕНИТЬ: Моя родительская версия spring boot-2.2.6.РЕЛИЗ. Что я заметил SecurityExpressionRoot , так это то, что при вызове hasAnyAuthorityMethod оператора loop in roleSet.contains(defaultedRole) возвращает false для значения отправленного заголовка, равного "USER_C, USER_A" , и true, когда значение отправленного заголовка равно "USER_A, USER_C"