لدينا مثيل Discourse مُعد مع SSO (باستخدام SAML/Shibboleth)، وقمت بإعداده للسماح بتضمين المحتوى على نطاق فرعي آخر يستخدم نفس نظام SSO.
إليك المشكلة التي أواجهها:
- يزور المستخدم صفحة على النطاق الفرعي X، والتي تضم موضوعًا من Discourse المضيف على النطاق الفرعي Y.
- يتم إعادة توجيه المستخدم إلى النطاق الفرعي Z لتسجيل الدخول عبر SSO. ثم يتم إعادة توجيهه مرة أخرى إلى النطاق الفرعي X.
- تقوم الصفحة على النطاق الفرعي X بجلب ملف JavaScript المضمن، الذي ينشئ إطارًا (iframe) يحاول جلب موضوع المنتدى. ومع ذلك، يعيد Discourse (النطاق الفرعي Y) توجيه الإطار إلى النطاق الفرعي Z لتسجيل الدخول عبر SSO، وبما أن المستخدم مسجل الدخول بالفعل، يتم إعادة توجيهه مرة أخرى إلى عنوان URL المضمن لـ Discourse. لكن هذا يؤدي إلى ظهور خطأ 400 “خطأ في التضمين”، لأن عنوان URL المرجعي (referer) يأتي الآن من النطاق الفرعي Z (نطاق SSO) بدلاً من النطاق الفرعي X (النطاق المعتمد/المُدرج في القائمة البيضاء للتضمين). ويعيد Discourse الرسالة “لم يتم إرسال عنوان URL المرجعي، أو أنه لا يطابق أيًا من المضيفين التاليين”.
- عند تحديث الصفحة، يعمل كل شيء بشكل مثالي (أي يتم جلب موضوع المنتدى بنجاح)، وعلى الأرجح لأن المتصفح يحتوي الآن على ملف تعريف ارتباط جلسة صالح (session cookie)، مما يلغي الحاجة إلى إعادة التوجيه إلى نطاق SSO.
هل هناك أي إجراء يمكنني اتخاذه لحل هذه المشكلة بشكل صحيح؟ حاليًا، لدي حل مؤقت فظيع للغاية، يحاول أولاً تحميل موضوع المنتدى في إطار مخفي، ثم ينتظر ثانية واحدة قبل تحميل الموضوع فعليًا في الصفحة المرئية للمستخدم.
أي مساعدة أو اقتراحات ستكون موضع تقدير!