Spring Cloud Netflix Zuul, CSRF и отправка формы

У меня проблемы с защитой Spring Cloud и CSRF. Я защитил свое приложение (шлюз и службу регистрации) с помощью Spring Cloud Security, OAuth2 и т. Д.

Я предоставил доступ каждому (allowAll) к / signup, где шлюз направляется к фактической службе регистрации. Я также предоставил доступ каждому на самом сервере регистрации. Это работает как ожидалось.

Что вызывает у меня головную боль, так это защита CSRF. Шлюз и служба регистрации создают токен CSRF самостоятельно. Токен от шлюза будет отправлен клиенту, а токен от службы регистрации потерян (где-то на шлюзе).

Если я отправляю что-то в службу регистрации, защита CSRF срабатывает и говорит, что токен был нулевым или фактическое значение не соответствует ожидаемому значению, если я пытаюсь повторно использовать значение из шлюза, который доступен в HTTP заголовки.

Я работаю с отключением CSRF в службе регистрации, но это не кажется правильным решением, потому что оно работает только тогда, когда кто-то отправляет токен обратно от клиента, как Angular SPA. Когда я пытаюсь отправить форму (которая отображается в службе регистрации) из браузера, это не удается из-за отсутствующего параметра _csrf. Если я активирую CSRF в службе регистрации и добавлю в форму параметр _csrf, защита шлюза CSRF вступит в действие и скажет, что фактический токен не соответствует ожидаемому, что абсолютно верно, поскольку фактический токен является один от службы регистрации, и ожидаемый токен от шлюза.

Я мог бы отключить CSRF на шлюзе, но это приведет к тому, что мне придется настраивать CSRF для каждого сервиса, который используется клиентом REST или SPA.

Я пробовал ignoreAntMatchers() в конфигурации HttpSecurity.csrf(), где я могу исключить определенные пути, но это мне тоже не помогает. Ожидаемое значение - это нечто совершенно другое. Кажется, новый сеанс создан для запроса POST.

Так есть ли шанс, что я смогу использовать CSRF на шлюзе и в сервисе регистрации с отправкой формы и Zuul одновременно?

0 ответов

У вас должно получиться заставить его работать: я думаю, что CSRF следует отключить в Zuul, и что Zuul должен пересылать исходный токен CSRF из службы.

Вы пытались установить собственные "чувствительные заголовки", чтобы избежать потери токена? Поскольку по умолчанию все заголовки "Cookie" и "Set-Cookie" удаляются, вам необходимо изменить его:

zuul:
  routes:
    users:
      path: /myusers/**
      # This is the default value if not set
      sensitiveHeaders: Cookie,Set-Cookie,Authorization
      url: https://downstream

становится

zuul:
  routes:
    users:
      path: /myusers/**
      sensitiveHeaders: Authorization
      url: https://downstream
Другие вопросы по тегам