كيفية إعادة التوجيه من مجال إلى آخر وتعيين ملفات تعريف الارتباط أو الرؤوس للمجال الآخر؟
لا تسمح عمليات إعادة توجيه HTTP بتعيين رؤوس أو ملفات تعريف ارتباط مخصصة للهدف اِختِصاص. بالإضافة إلى ذلك، تمنع المتصفحات تعيين ملفات تعريف الارتباط لمجال مختلف عن ذلك الذي يستجيب برأس Set-Cookie.
الحل 1: إعادة التوجيه باستخدام معلمة الاستعلام ثم تعيين ملف تعريف الارتباط
- إعادة التوجيه من المجال "أ" إلى المجال "ب" مع رمز وصول تم تمريره كمعلمة استعلام.
- يتلقى المجال "ب" الطلب ويقوم بتعيين ملف تعريف الارتباط الخاص به باستخدام الرمز المميز.
الحل 2: الأصل المشترك التواصل مع Window.postMessage()
- أضف إطار iframe مخفي إلى المجال A يشير إلى المجال B.
- أرسل رمز الوصول إلى المجال B باستخدام Window.postMessage().
- يقوم المجال B بتخزين الرمز المميز في localStorage أو تعيين ملف تعريف الارتباط باستخدام JS.
- إرسال رسالة إلى المجال A مفادها أنه تم تخزين الرمز المميز وإعادة توجيه المستخدم إلى المجال B.
الحل 3: تبادل الرمز المميز من جانب الخادم
- استخدم علامة في المجال A للإشارة إلى المجال B باستخدام رمز وصول كمعلمة استعلام.
- يستجيب المجال B بـ تعيين رؤوس ملفات تعريف الارتباط عند تلقي الطلب.
- استخدم الجلب أو XMLHttpRequest (مع بيانات الاعتماد وتمكين CORS) لإرسال الرمز المميز مباشرة إلى المجال B.
- يقوم النطاق B بتعيين ملف تعريف الارتباط عند تلقي الوصول الرمز المميز.
ملاحظات هامة:
يجب تمكين جميع ملفات تعريف الارتباط في إعدادات المتصفح حتى يعمل الحلان 2 و 3. -
استخدم SameSite=None; علامات آمنة في ملفات تعريف الارتباط للحل 3. -
تكشف سلسلة الاستعلام في الحل 1 عن رمز الوصول وتطرح مخاطر أمنية. -
يتطلب الحل 3 تمكين CORS على المجال الهدف ومواصفات الأصل الصريحة على جانب الخادم.