مشكلة: ظهور خطأ اكتشاف CSRF عند تسجيل الدخول باستخدام OAuth2 مع إضافة oauth2-basic

مرحباً،

لقد واجهت خطأ “csrf_detected” أثناء استخدام المكون الإضافي oauth2-basic لتسجيل الدخول عبر OAuth2. فيما يلي التدفق التفصيلي للمشكلة:

  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 ومعرفة ما إذا كان ذلك يحل المشكلة؟

إذا لم يكن كذلك، فما هو مسار طلبك؟