Получение токена CSRF на клиентских микросервисах - PullRequest
0 голосов
/ 03 марта 2020

У меня есть архитектура Microservices, и я обрабатываю CSRF на общем шлюзе (который использует Zuul), который выполняет аутентификацию.

Вот класс SecurityConfig службы шлюза.

@Configuration
@EnableWebSecurity
public class GatewaySecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
     http.addFilterBefore(authenticationProcessingFilter(), 
        UsernamePasswordAuthenticationFilter.class)
      .anyRequest().authenticated().
      and().formLogin().loginPage(loginFormUrl).permitAll().and().logout().permitAll().and()
      .csrf().ignoringAntMatchers("/authenticate")
      .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
   }
}

А вот класс SecurityConfig клиентской службы, которому нужен токен CSRF, установленный в службе шлюза

@Configuration
@EnableWebSecurity
public class ClientSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.httpBasic().disable().authorizeRequests()
      .anyRequest().permitAll().
      and().csrf().disable();
  }
}

Я отключил CSRF в клиентском приложении, поскольку хочу, чтобы обработка CSRF only была сделано в сервисе Gateway. Однако, когда я пытаюсь получить токен и заголовок на стороне клиента, они все отображаются как неопределенные.

   var csrfParameter = $("meta[name='_csrf_parameter']").attr("content");
   var csrfHeader = $("meta[name='_csrf_header']").attr("content");
   var csrfToken = $("meta[name='_csrf']").attr("content");

Однако, когда я включаю csrf в ClientSecurityConfig, генерируется другой токен csrf. Как получить набор токенов CSRF в службе шлюза. Это то, что я пробовал.

  1. Мне известно, что токен CSRF сохраняется в файлах cookie. Однако, когда я пытаюсь получить этого повара ie, используя JS

    var cook ie = decodeURIComponent (document.cook ie)

Повар ie не указан в среде HTTPS, поскольку повар ie теперь защищен и не может быть прочитан из сценариев. (Я могу прочитать этот повар ie в обычной среде HTTP)

Есть есть лучший способ обработки управления CSRF в микросервисах или идеальный способ для других служб получить доступ к токену, установленному GatewayService. Я что-то здесь упускаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...