Problema: Erro Detectado de CSRF com Login OAuth2 usando o plugin oauth2-basic

Olá,

Encontrei um erro “csrf_detected” ao usar o plugin oauth2-basic para fazer login via OAuth2. Abaixo está o fluxo detalhado do problema:

  1. Eu clico em “Login”, que me redireciona para:
    https://myforum/auth/basic_oauth2
  2. Em seguida, ele executa um redirecionamento 302 para:
    https://myforum/auth/failure?message=csrf_detected

Passos para Reproduzir:

Ao tentar fazer login, o seguinte comando curl simula a solicitação:

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'

O resultado é um redirecionamento 302 para a página de falha com a mensagem “csrf_detected”:

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

Constatações:

  • Se eu omitir o parâmetro authenticity_token, o fluxo de login funciona corretamente e me redireciona para a página de login OAuth2 como esperado:

Pergunta:

Parece que quando a solicitação GET para /auth/oauth2_basic inclui um authenticity_token, o sistema o verifica e gera o erro CSRF se o token for inválido. Mas estou confuso — já que ainda não estou logado, como eu teria um authenticity_token nesta fase?

Este é o comportamento esperado ou há um problema com a forma como o token CSRF está sendo tratado no processo de login inicial?

Qualquer ajuda ou orientação seria apreciada!

Obrigado!

Frequentemente vemos esse erro quando há uma incompatibilidade entre o que o navegador está usando e o que o backend espera.

Você pode tentar ativar force_https e ver se isso resolve o problema?

Se não, qual é o seu caminho de solicitação?