CSRFTokenVerifier::InvalidCSRFToken عند بدء تسجيل الدخول عبر SAML في Discourse 2026.6
مرحباً،
أحاول تكوين مصادقة SAML مع ADFS على تثبيت Discourse جديد.
البيئة
- إصدار Discourse: 2026.6 (Rails 8.0.5)
- إضافة discourse-saml
- معرف الإضافة:
7d0fe944bf33588e6813bffaef5eb8f34e37d039
- تم تمكين HTTPS
- وكيل عكسي / موازن أحمال أمام Discourse
- force_https = true
تكوين SAML
نقطة نهاية البيانات الوصفية تعمل بشكل صحيح:
https://<hostname>/auth/saml/metadata
تحتوي البيانات الوصفية على:
- EntityID
- ACS URL
- SLO URL
نجح فريق ADFS في استيراد البيانات الوصفية.
المشكلة
عند النقر على تسجيل الدخول عبر SAML، لا يقوم Discourse بتوجيه المستخدم إلى ADFS.
بدلاً من ذلك، يعيد فوراً:
عذراً، انتهت مهلة التفويض، أو قمت بتغيير المتصفحات.
سجل Rails
Started GET "/session/csrf"
Completed 200 OK
Started POST "/auth/saml"
(saml) Authentication failure!
CSRFTokenVerifier::InvalidCSRFToken
Started GET "/auth/failure?message=csrf_detected&strategy=saml"
الأشياء التي تم التحقق منها بالفعل
- يعمل HTTPS
- Discourse.base_url = https://hostname
- force_https = true
- كوكي الجلسة (_forum_session) موجودة
- authenticity_token مدرج في POST /auth/saml
- إضافة discourse-saml هي أحدث فرع رئيسي
- نقطة نهاية البيانات الوصفية تعمل
- تم إعادة إنشاء بيانات ADFS الوصفية من بيانات SP الوصفية
طلب المتصفح
يحتوي POST /auth/saml على:
- كوكي _forum_session
- authenticity_token
ومع ذلك، يفشل الطلب فوراً بـ:
CSRFTokenVerifier::InvalidCSRFToken
لا يصل أبداً إلى ADFS.
معلومات إضافية
أدوات مطوري المتصفح تظهر:
x-csrf-token: undefined
هل يمكن أن يكون هذا مشكلة CSRF في Rails 8 / OmniAuth، أم أن هناك تكويناً آخر مطلوباً لـ discourse-saml على إصدارات Discourse الأخيرة؟
أي اقتراحات ستكون موضع تقدير.
Discourse.base_url
https://testvknowyeni.vakifbank.intra
SiteSetting.force_https
true
SiteSetting.same_site_cookies
Lax