Проблема: ошибка обнаружения CSRF при входе через OAuth2 с использованием плагина oauth2-basic

Привет,

При использовании плагина oauth2-basic для входа через OAuth2 я столкнулся с ошибкой «csrf_detected». Ниже приведено подробное описание хода возникновения проблемы:

  1. Я нажимаю «Войти», что перенаправляет меня на:
    https://myforum/auth/basic_oauth2
  2. Затем происходит редирект 302 на:
    https://myforum/auth/failure?message=csrf_detected

Шаги для воспроизведения:

При попытке входа следующая команда curl имитирует запрос:

curl -vvvv 'https://myforum/auth/oauth2_basic' \
  -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' \
  -H 'accept-language: zh-CN,zh;q=0.9' \
  -H 'cache-control: max-age=0' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -H 'cookie: _forum_session=k9aHXc2cWsx%2FMBL26KTV33PSo8jC9Am47UBoT5Zq9qYAm2nKoU2BJkAR1bgc6U%2BYqsL3%2F3sjiYRmJoNr3JuvzkjdYl%2FjzT9djkq%2BYjSmN16EUEdZIdOl%2Fiv1MohQkthKSnOpUdXLTxHZBezxTg4O%2Bs6LUZ7HzCjpT3lxm24FS4xOPkU5QnSHBM%2F7GazZRhGywXsHKGdJ6fY0kVo%2BJHNNHBZu--qQKGn36Xh7jvKPEs--I1b3oz4nv2xe%2Fmi0bKPLog%3D%3D' \
  -H 'origin: https://myforum' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36' \
  --data-raw 'authenticity_token=doSNHEhj23HibAEZf0znqzevPNPq9Bub69Xnq18mKARw8GiGP-cokbg7k0qUvRgH3kayeJK7_-boeoOvX6GKqQ'

Результат — редирект 302 на страницу ошибки с сообщением «csrf_detected»:

< HTTP/2 302 
< location: /auth/failure?message=csrf_detected

Выводы:

  • Если я исключаю параметр authenticity_token, процесс входа работает корректно, и меня перенаправляет на страницу входа OAuth2, как и ожидалось:

Вопрос:

Кажется, что при GET-запросе к /auth/oauth2_basic, включающем authenticity_token, система проверяет его и выдаёт ошибку CSRF, если токен недействителен. Но меня это смущает — раз я ещё не авторизован, откуда у меня вообще может быть authenticity_token на этом этапе?

Это ожидаемое поведение, или же проблема в том, как обрабатывается CSRF-токен на начальном этапе входа?

Буду признателен за любую помощь или подсказку!

Спасибо!

Мы часто видим эту ошибку, когда возникает несоответствие между тем, что использует браузер, и тем, что ожидает бэкенд.

Попробуйте включить force_https и посмотрите, решит ли это проблему.

Если нет, какой у вас путь запроса?