تاريخ OAuth: من كلمات المرور إلى المعايير العالمية

تراه كل يوم. تنقر على "Login with Google" أو "Login with GitHub". لا تكتب كلمة مرور، بل تدخل إلى الموقع فوراً.

يعمل هذا بفضل OAuth. إنه المعيار العالمي للأمان، لكنه لم يبدأ بهذه الطريقة، بل تطور لحل مشكلات ضخمة.

المشكلة في كلمات المرور

في الأيام الأولى، كنت تنشئ كلمة مرور جديدة لكل موقع إلكتروني. تسبب هذا في ثلاث مشكلات كبيرة:

  • كان الناس يستخدمون نفس كلمة المرور في كل مكان. إذا تسربت بيانات موقع واحد، أصبحت جميع الحسابات في خطر.
  • كان الناس ينسون كلمات المرور، فكانوا يقضون وقتاً في النقر على "forgot password" أكثر مما يقضونه في استخدام الويب.
  • كانت المواقع ترى كلمة مرورك الأصلية. فإذا تم اختراق موقع ما، تضيع كلمة مرورك.

تطور الأمان

  1. Basic Auth: كنت ترسل اسم المستخدم وكلمة المرور مع كل طلب. إذا لم تستخدم HTTPS، كان بإمكان المخترقين رؤية كل شيء.

  2. Session Cookies: كنت تسجل الدخول مرة واحدة وتحصل على معرف جلسة (session ID). كان هذا أفضل، لكن يمكن سرقة ملفات تعريف الارتباط (cookies) عبر هجمات مثل XSS أو CSRF. كما أنه لم يكن بإمكان موقع واحد استخدام تسجيل دخولك للتواصل مع موقع آخر.

  3. API Keys: كنت تعطي الموقع مفتاحاً خاصاً. كان هذا أفضل لأنك لم ترسل كلمة مرورك. ومع ذلك، غالباً ما تمتلك مفاتيح API صلاحيات واسعة جداً. فإذا أعطيت مفتاح API لتطبيق ما، فقد يمتلك هذا التطبيق القدرة على قراءة رسائل بريدك الإلكتروني، وإرسال الرسائل، وحذف حسابك. الأمر يشبه إعطاء مفتاح سيارتك لموظف ركن السيارات في الفندق، ولكن هذا المفتاح يفتح منزلك أيضاً.

حل OAuth: مفتاح ركن السيارات (Valet Key)

غيّر OAuth قواعد اللعبة. فبدلاً من إعطاء كلمة مرورك، فإنك تعطي "token". فكر في الأمر كمفتاح ركن السيارات (valet key)؛ حيث يسمح مفتاح ركن السيارات للسائق بركن سيارتك، لكنه لا يسمح له بفتح صندوق السيارة أو الدخول إلى منزلك.

كيف يعمل OAuth في الواقع:

  • تريد استخدام Canva وسحب صور من Google.
  • تطلب Canva الإذن من Google.
  • تسألك Google: "هل يمكن لـ Canva عرض صورك؟"
  • تقول: "نعم، ولكن للعرض فقط. لا تسمح لهم بحذف أي شيء."
  • تعطي Google تطبيق Canva "token" محدداً.

لا ترى Canva كلمة مرور Google الخاصة بك أبداً. وحتى لو سرق مخترق ذلك الـ token، فلن يتمكن إلا من عرض الصور لفترة قصيرة، ولا يمكنه تغيير كلمة مرورك أو تحويل أموالك.

الأمان الحديث: PKCE

تعاني تطبيقات الهاتف وتطبيقات الويب من نقطة ضعف، وهي عدم قدرتها على إخفاء الأسرار بشكل جيد. ولحل هذه المشكلة، نستخدم PKCE (Proof Key for Code Exchange).

يعمل الأمر مثل نظام الحجز:

  • ينشئ التطبيق رمزاً سرياً (the verifier).
  • يرسل التطبيق نسخة مشفرة (hashed) من ذلك الرمز (the challenge) إلى Google.
  • عندما يطلب التطبيق الـ token، فإنه يرسل الرمز السري الأصلي.
  • تتحقق Google مما إذا كان الرمز يطابق الـ challenge.

إذا تطابقا، تعرف Google أنه نفس التطبيق. وإذا لم يتطابقا، تقوم Google بحظر الطلب. وهذا يمنع المخترقين من سرقة رمز التفويض (authorization code) الخاص بك.

خارطة طريق OAuth

  • 2007 (OAuth 1.0): معقد للغاية وكان يستخدم عمليات رياضية ثقيلة.
  • 2012 (OAuth 2.0): أسرع وأسهل، حيث استخدم الـ tokens وتطلب استخدام HTTPS.
  • 2016 (OAuth 2.0 + PKCE): أضاف الأمان لتطبيقات الهاتف وتطبيقات الويب الحديثة.
  • 2023 (OAuth 2.1): المعيار الذهبي الجديد، حيث أزال الطرق القديمة وغير الآمنة.

الدرس الأساسي: لا تعطِ كلمة مرورك أبداً لتطبيق آخر. بدلاً من ذلك، امنحهم تذكرة محدودة تنتهي صلاحيتها، وبذلك تظل أنت المتحكم.

Source: https://dev.to/gophernment/oauth-elaaaebbprawatisaastr-cchaakrhasphaan-suumaatrthaanolk-16b4