الفصل بيتقري مع مواصفة التفويض وممارسات OAuth. العناوين الكبيرة: نائب مرتبك، تمرير توكن، طلب مزور من السيرفر، خطف مقبض الحالة، تسوية سيرفر لوكال، التحقق من روابط التفويض، وسيط stdio، خلط الردود، تحويل localhost، ثقة هوية الكلاينت، وأقل صلاحية.
النائب المرتبك
يحصل لما بروكسي يوصل كلاينتس بواجهة طرف تالت، ويتصرف كعميل OAuth واحد قدام الواجهة بمعرّف ثابت، وفي نفس الوقت يسمح للكلاينتس تسجّل ديناميكي، ومن غير موافقة لكل كلاينت قبل التحويل. الواجهة تحط كوكيز موافقة على المعرف الثابت. المهاجم يبعت لينك تحويل خبيث بمعرف اتسجل ديناميكي.
الحماية: البروكسي يعمل موافقة لكل client_id قبل مسار الطرف التالت. الشاشة باسم الكلاينت بوضوح، ومن غير إطار (X-Frame-Options: DENY)، والموافقة مخزنة ومشفرة ومرتبطة بالكلاينت مش بجملة «اليوزر وافق». معامل state يتخزن بعد الموافقة الصريحة بس، مش قبلها.
الشروط الأربعة: كوكيز موافقة، وتسجيل ديناميكي، ومعرف عميل ثابت، وغياب موافقة لكل كلاينت.
تمرير التوكن
السيرفر يقبل توكن من الكلاينت من غير ما يتأكد إنها اتعملت له، ويعدّيها للواجهة اللي تحته. بيفشل فحص الجمهور، فيقبل توكن لخدمة تانية. لو عدّاها زي ما هي، الواجهة تثق فيها كأنها منه. كده بيتجاوز المراقبة وحد المعدل. واللوج مش هيميّز الكلاينتس.
افصل الجمهور من الأول حتى لو النهارده بروكسي صرف. كده التطوير بعدين يبقى أسهل.
طلب لعنوان مش مقصود
وقت اكتشاف OAuth الكلاينت بيجيب عناوين ممكن سيرفر خبيث يتحكم فيها: من الهيدر، ومن قائمة خوادم التفويض. الخطر: شبكة داخلية، أو بيانات وصف سحابة، أو تسريب عبر الأخطاء.
الكلاينت المنشور على سيرفر يراعي الحماية: HTTPS، ومنع العناوين الخاصة (10/8 و 172.16/12 و 192.168/16)، وبروكسي خروج يمنع الوجهات الداخلية. فيه استثناء صريح للتطوير. نفس الكلام على خادم التفويض لما يجيب وثيقة هوية كلاينت مجهول.
حالة ومقبض
البروتوكول من غير جلسات على مستواه. السيرفر اللي محتاج حالة عبر الطلبات يعمل مقبض هو اللي أصدره، مش قيمة جاية من الكلاينت، ويرفض المقبض من أي حد تاني. اربط المقبض باليوزر. جلسات الإصدارات القديمة ليها قسم خطف لوحده في نسخة 2025-11-25.
السيرفر اللوكال
اللي نزلته أو كتبته أو ثبّته من إعداد الكلاينت ممكن ينفّذ كود بصلاحياتك. الكلاينت يعرض الأمر كامل، ويحذّر إن السيرفر بنفس صلاحياته، وياخد موافقة، ويفضل يعزله. السيرفر اللوكال يستخدم stdio عشان الكلاينت بس يوصل. لو HTTP، اربطه بواجهة محلية واطلب مصادقة.
روابط التفويض
متقبلش غير http و https. رابط javascript: في فتح نافذة يبقى تنفيذ سكربت. رابط بأمر شل يبقى تنفيذ أمر. وسيط stdio نفسه مش ضعيف. الضعف لما بروكسي لوكال يشغّل سيرفرات كعمليات ابن، وثغرة في الكلاينت تسرق توكن الوسيط. امنع الثغرة الأول، وعزل الوسيط، وسجّل كل استخدام.
PKCE لوحده مش كفاية ضد خلط الردود: المهاجم يخلّي الكلاينت يبعت الكود لنقطة توكن غلط. الكلاينت يربط الرد بخادم التفويض اللي سجّله قبل التحويل (RFC 9207).
تحويل localhost مع وثيقة هوية كلاينت بيثبت ملكية دومين، مش مين العملية السامعة على الجهاز. المهاجم يفتح أي بورت محلي ويستلم الكود. الحماية تحذيرات إضافية على خادم التفويض. والخادم يقدر يثق في دومينات بقائمة سماح، أو يقبل أي هوية https للسيرفرات المفتوحة، أو يراجع السمعة.
أقل صلاحية
ابدأ بالنطاق الأساسي، وارفع تدريجي بهيدر فيه النطاق المطلوب أول ما العملية المميزة تحتاجه. الكلاينت يعمل كاش لآخر فشل عشان ما يلفش. عند إعادة التفويض يجمع اتحاد اللي طلبه قبل كده والجديد. السيرفر يراعي التدرج (صلاحية أعلى تشمل اللي تحتها) وهو بيقرر التوكن.