Problem: CSRF-Detected-Fehler bei OAuth2-Login mit dem oauth2-basic Plugin

Hallo,

Ich bin auf einen „csrf_detected“-Fehler gestoßen, als ich das Plugin oauth2-basic verwendet habe, um mich über OAuth2 anzumelden. Hier ist der detaillierte Ablauf des Problems:

  1. Ich klicke auf „Anmelden“, was mich weiterleitet zu:
    https://myforum/auth/basic_oauth2
  2. Es führt dann eine 302-Weiterleitung zu:
    https://myforum/auth/failure?message=csrf_detected

Reproduktionsschritte:

Wenn ich versuche, mich anzumelden, simuliert der folgende curl-Befehl die Anfrage:

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'

Das Ergebnis ist eine 302-Weiterleitung zur Fehlerseite mit der Meldung „csrf_detected“:


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

Feststellungen:

  • Wenn ich den authenticity_token-Parameter weglasse, funktioniert der Anmeldevorgang korrekt und leitet mich wie erwartet zur OAuth2-Anmeldeseite weiter:

Frage:

Es scheint, dass das System, wenn die GET-Anfrage an /auth/oauth2_basic ein authenticity_token enthält, dieses prüft und den CSRF-Fehler auslöst, wenn das Token ungültig ist. Aber ich bin verwirrt – da ich noch nicht angemeldet bin, woher hätte ich zu diesem Zeitpunkt ein authenticity_token?

Ist dies ein erwartetes Verhalten, oder gibt es ein Problem mit der Handhabung des CSRF-Tokens im anfänglichen Anmeldevorgang?

Jede Hilfe oder Anleitung wäre willkommen!

Vielen Dank!

Wir sehen diesen Fehler häufig hier, wenn es eine Diskrepanz zwischen dem gibt, was der Browser verwendet, und dem, was das Backend erwartet.

Können Sie versuchen, force_https zu aktivieren und zu sehen, ob das das Problem behebt?

Wenn nicht, was ist Ihr Request-Pfad?