Problème : erreur CSRF détectée lors de la connexion OAuth2 avec le plugin oauth2-basic

Salut,

J’ai rencontré une erreur « csrf_detected » en utilisant le plugin oauth2-basic pour me connecter via OAuth2. Voici le déroulement détaillé du problème :

  1. Je clique sur « Connexion », ce qui me redirige vers :
    https://myforum/auth/basic_oauth2
  2. Il effectue ensuite une redirection 302 vers :
    https://myforum/auth/failure?message=csrf_detected

Étapes de reproduction :

Lorsque j’essaie de me connecter, la commande curl suivante simule la requête :

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'

Le résultat est une redirection 302 vers la page d’échec avec le message « csrf_detected » :

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

Constatations :

  • Si je supprime le paramètre authenticity_token, le flux de connexion fonctionne correctement et me redirige vers la page de connexion OAuth2 comme prévu :

Question :

Il semble que lorsque la requête GET vers /auth/oauth2_basic inclut un authenticity_token, le système le vérifie et déclenche l’erreur CSRF si le jeton est invalide. Mais je suis confus : puisque je ne suis pas encore connecté, comment aurais-je un authenticity_token à ce stade ?

Est-ce le comportement attendu, ou y a-t-il un problème dans la gestion du jeton CSRF lors du processus de connexion initial ?

Toute aide ou conseil serait apprécié !

Merci !

Nous rencontrons fréquemment cette erreur lorsqu’il y a une incohérence entre ce que le navigateur utilise et ce que le backend attend.

Pouvez-vous essayer d’activer force_https et voir si cela résout le problème ?

Sinon, quel est votre chemin de requête ?