问题:使用 oauth2-basic 插件的 OAuth2 登录时检测到 CSRF 错误

您好,

在使用 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,看看是否能解决问题?

如果不行,您的请求路径是什么?