ما هو OAuth؟ «تسجيل الدخول بحساب Google» والوصول المفوّض
OAuth معيار مفتوح يتيح لمستخدم أن يمنح تطبيقًا واحدًا وصولًا محدودًا إلى حسابه في خدمة أخرى، دون أن يسلّمه كلمة المرور. حين تنقر «Connect Google Calendar» وترى شاشة تسأل «هل تسمح لهذا التطبيق برؤية أحداثك؟»، فهذا هو OAuth. يحصل التطبيق على رمز يخص ما وافقت عليه فقط، ويمكنك إلغاؤه في أي وقت. والآلية نفسها، مع طبقة إضافية تسمى OpenID Connect، تشغّل «تسجيل الدخول بحساب Google» وأزرار مشابهة.
لماذا يهم OAuth عند البناء بالذكاء الاصطناعي
يظهر OAuth في حالتين شائعتين حين تبني تطبيقًا:
- تسجيل الدخول الاجتماعي. تريد أن يستطيع مستخدموك «تسجيل الدخول بحساب Google» (أو Apple أو Microsoft أو GitHub) بدلًا من إنشاء كلمة مرور جديدة. انظر كيف تضيف تسجيل دخول إلى تطبيقك.
- الاتصال بحسابات المستخدمين في خدمات أخرى. يحتاج تطبيقك إلى قراءة تقويم المستخدم، أو النشر على حسابه الاجتماعي، أو سحب الملفات من سحابته، أو مزامنة بيانات محاسبته.
في الحالتين يستطيع مُنشئ التطبيقات بالذكاء الاصطناعي كتابة الكود، لكن بعض الخطوات لا يقوم بها إلا أنت: إنشاء تطبيق مطوّر لدى المزود، والحصول على معرّف العميل (Client ID) والسر (Client Secret)، وتسجيل عناوين الرد، وفي بعض الصلاحيات اجتياز مراجعة المزود. ومعرفة طريقة عمل OAuth تجعل هذه الخطوات، والأخطاء التي تنتجها، أقل غموضًا بكثير. وللصورة الأكبر عن تسجيل الدخول، انظر ما هي المصادقة.
تشبيه يومي
فكر في بطاقة مفتاح الفندق. عند تسجيل الوصول يتحقق الاستقبال من هويتك، ثم يعطيك بطاقة تفتح غرفتك والنادي الرياضي، لا الغرف الأخرى ولا مناطق الموظفين، وتتوقف عن العمل عند المغادرة. البطاقة لا تحتوي جواز سفرك. وإذا فقدتها ألغاها الاستقبال وأصدر لك بديلًا.
- الاستقبال هو خادم التفويض (صفحة تسجيل دخول Google).
- التحقق من هويتك هو تسجيلك الدخول إلى Google.
- بطاقة المفتاح هي رمز الوصول (Access Token).
- «الغرفة والنادي فقط» هي النطاقات (Scopes) التي وافقت عليها.
- المغادرة هي انتهاء صلاحية الرمز، أو إلغاؤك الوصول يدويًا.
التطبيق الذي تستخدمه لا يرى كلمة مرور Google أبدًا، بل يرى البطاقة فقط.
كيف يعمل OAuth خطوة بخطوة
أكثر التدفقات شيوعًا لتطبيقات الويب هو تدفق رمز التفويض (Authorization Code Flow). هذا ما يحدث حين يربط مستخدم تقويم Google الخاص به بتطبيق جدولة مواعيد:
- النقر. ينقر المستخدم «Connect Google Calendar».
- التوجيه إلى المزود. يرسل التطبيق المتصفح إلى Google مع معرّف العميل الخاص به، والنطاقات التي يريدها (قراءة أحداث التقويم)، وعنوان الرد (Redirect URI) الذي يجب أن تعيد Google المستخدم إليه.
- تسجيل الدخول والموافقة. يسجل المستخدم الدخول إلى Google (إذا لم يكن مسجلًا)، ويرى شاشة الموافقة التي تعرض ما يطلبه التطبيق، فينقر «Allow».
- العودة برمز. تعيد Google توجيه المتصفح إلى عنوان الرد الخاص بالتطبيق مع رمز تفويض (Authorization Code) قصير العمر ويُستخدم مرة واحدة.
- التبادل على الخادم. يرسل خادم التطبيق هذا الرمز، مع السر الخاص به، مباشرة إلى Google فيستلم رمز وصول (وغالبًا رمز تحديث).
- استخدام الواجهة. يستدعي الخادم واجهة تقويم Google برمز الوصول فيحصل على أحداث المستخدم.
يبدو رد النداء في الخطوة 4 هكذا:
https://yourapp.com/auth/google/callback?code=4/0Adeu5B...&state=x7Kq9
والرد الذي يحتوي الرمز في الخطوة 5 هو JSON بهذا الشكل:
{
"access_token": "ya29.a0Af...",
"expires_in": 3599,
"refresh_token": "1//0gL...",
"scope": "https://www.googleapis.com/auth/calendar.readonly",
"token_type": "Bearer"
}
النقطة المهمة في التصميم: يتم تبادل الرمز بين الخادم والخادم، فلا يحتاج السر الخاص بالعميل والرموز إلى المرور عبر المتصفح أبدًا.
OAuth مقابل OpenID Connect ومقابل تسجيل الدخول الخاص بك
| ماذا يجيب | مثال | |
|---|---|---|
| OAuth 2.0 | «ما الذي يحق لهذا التطبيق فعله نيابةً عن المستخدم؟» (التفويض) | قراءة تقويم المستخدم |
| OpenID Connect (OIDC) | «من هذا المستخدم؟» (المصادقة)، مبني فوق OAuth | «تسجيل الدخول بحساب Google» الذي يعيد بريدًا إلكترونيًا موثقًا |
| تسجيل دخولك الخاص | «هل هذه كلمة المرور الصحيحة لهذا الحساب؟» | بريد وكلمة مرور مخزنة (مُجزّأة) في قاعدة بياناتك |
كثير من التطبيقات تجمع بينها: تسجيل دخول بالبريد وكلمة المرور، إضافةً إلى «تسجيل الدخول بحساب Google» عبر OIDC، واتصالات OAuth منفصلة بخدمات أخرى.
مصطلحات أساسية
| المصطلح | المعنى |
|---|---|
| المزود / خادم التفويض | الخدمة التي يسجل المستخدم الدخول إليها ويمنح الصلاحيات عندها، مثل Google أو Microsoft أو GitHub. |
| العميل (Client) | تطبيقك كما هو مسجل لدى المزود. |
| معرّف العميل (Client ID) | المعرّف العام لتطبيقك لدى المزود. |
| السر (Client Secret) | كلمة المرور الخاصة بتطبيقك لدى المزود. يبقى على الخادم فقط. |
| النطاق (Scope) | صلاحية محددة، مثل «قراءة التقويم» أو «عرض عنوان البريد الإلكتروني». |
| شاشة الموافقة (Consent screen) | الصفحة التي يرى فيها المستخدم النطاقات المطلوبة ويوافق عليها. |
| عنوان الرد (Redirect URI / Callback URL) | المكان الذي يعيد المزود المستخدم إليه. يجب تسجيله مسبقًا ويطابق تمامًا. |
| رمز الوصول (Access Token) | بيانات اعتماد قصيرة العمر لاستدعاء الواجهة. |
| رمز التحديث (Refresh Token) | بيانات اعتماد أطول عمرًا للحصول على رموز وصول جديدة. احفظه كما تحفظ كلمة المرور. |
| رمز الهوية (ID Token) | في OIDC، رمز موقّع يصف من هو المستخدم. |
| PKCE | فحص إضافي («مفتاح إثبات») يمنع استخدام رموز التفويض إذا اعترضها أحد. يُنصح به لكل العملاء. |
| state | قيمة عشوائية تحمي التدفق من الطلبات المزورة. |
مفاهيم خاطئة شائعة
- «OAuth نظام تسجيل دخول». OAuth العادي يمنح الوصول، أما OpenID Connect فيتولى الهوية. واستخدام رمز وصول خام كدليل على هوية شخص ما تسبب في أخطاء أمنية حقيقية.
- «التطبيق يحصل على كلمة مروري». لا يحدث ذلك أبدًا. وتلك هي الفكرة.
- «طلب صلاحيات أكثر لا يضر». المستخدمون يتوجسون من الطلبات الواسعة، وقد تشترط مزودات مثل Google مراجعة التطبيق للصلاحيات الحساسة أو المقيّدة. اطلب فقط ما تحتاجه.
- «السر الخاص بالعميل يمكن وضعه في الواجهة الأمامية». أي شيء في كود المتصفح عام. احتفظ به في أسرار الخادم.
- «يعمل في الاختبار إذن سيعمل في الإنتاج». كثير من المزودات تحد من التطبيقات غير المُتحقَّق منها، مثل قصرها على مستخدمين تجريبيين مسجلين، ويجب تسجيل عنوان الرد للنطاق الحي بشكل منفصل.
- «الرموز تدوم إلى الأبد». رموز الوصول تنتهي بسرعة، ويستطيع المستخدمون إلغاء الوصول. ويجب أن يتعامل تطبيقك مع الحالتين بسلاسة.
ماذا تسأل مُنشئ التطبيقات بالذكاء الاصطناعي
- «أضف زر „تسجيل الدخول بحساب Google“ باستخدام OpenID Connect ومكتبة مصادقة مُصانة جيدًا، ولا تكتب تدفق OAuth بنفسك.»
- «استخدم تدفق رمز التفويض مع PKCE، وتحقق من معامل
state.» - «اقرأ معرّف العميل والسر من متغيرات البيئة على الخادم.»
- «اطلب النطاقات التي نحتاجها فقط: قراءة التقويم دون تعديل.»
- «اذكر لي كل عنوان إعادة توجيه أحتاج إلى تسجيله في لوحة المزود: للمعاينة، والرابط المنشور، ونطاقي المخصص.»
- «خزّن رموز التحديث مشفّرة في قاعدة البيانات، وعند انتهاء الرمز أو إلغائه اطلب من المستخدم إعادة الربط.»
- «اسمح للمستخدمين بفصل التكامل من صفحة إعداداتهم.»
OAuth وMythex
لا يملك Mythex تسجيل دخول مدمجًا للمستخدمين النهائيين في التطبيقات التي تبنيها؛ فوثائقه تصف نهجًا تأتي فيه بأداة المصادقة الخاصة بك: تختار مكتبة مصادقة أو مزودًا مستضافًا، وتخزن مفاتيحه كـأسرار المشروع، ويكتب الوكيل الكود. ووصفة إضافة المصادقة تتضمن طلبًا جاهزًا لذلك. وستصادف OAuth في Mythex نفسها أيضًا: يمكنك التسجيل بحساب Google، وربط GitHub لمزامنة المستودعات يستخدم OAuth الخاص بـ GitHub، والمساعدون الذين يتصلون بـ Mythex عبر MCP يمرون عبر صفحة موافقة OAuth. للمزيد، انظر ما هي المصادقة وما هي المصادقة الثنائية.
الأسئلة
ما هو OAuth ببساطة؟
OAuth معيار متبع يتيح للمستخدم أن يمنح تطبيقًا ما وصولًا محدودًا إلى حسابه في خدمة أخرى، كأن يسمح لتطبيق جدولة مواعيد بقراءة تقويم Google الخاص به، دون أن يعطيه كلمة المرور. يوافق المستخدم على صلاحيات محددة، ويستلم التطبيق رمزًا (Token) يستخدمه لتلك الصلاحيات وحدها.
هل OAuth هو نفسه «تسجيل الدخول بحساب Google»؟
«تسجيل الدخول بحساب Google» مبني على OAuth 2.0 مع OpenID Connect، وهي طبقة فوق OAuth تضيف طريقة معيارية لمعرفة من هو المستخدم. OAuth وحده يتعلق بمنح الوصول؛ أما OpenID Connect فيحوّله إلى تسجيل دخول.
ما هو رمز الوصول (Access Token) في OAuth؟
رمز الوصول بيانات اعتماد يرسلها التطبيق إلى واجهة برمجة الخدمة ليثبت أنه مُنح الوصول. وهو عادةً قصير العمر ومقيّد بالصلاحيات (النطاقات) التي وافق عليها المستخدم. ورمز التحديث (Refresh Token)، إن صدر، يسمح للتطبيق بالحصول على رموز وصول جديدة دون أن يسأل المستخدم من جديد.
ماذا يعني redirect_uri_mismatch؟
يعني أن عنوان رد النداء (Callback) الذي أرسله تطبيقك أثناء تسجيل الدخول لا يطابق تمامًا عنوانًا مسجلًا في لوحة مطوري المزود. أضف العنوان الدقيق، بما فيه https والنطاق والمسار وأي شرطة مائلة في النهاية، لكل عنوان يعمل عليه تطبيقك.
هل OAuth آمن؟
OAuth 2.0 منتشر على نطاق واسع وآمن إذا طُبّق بشكل صحيح: باستخدام تدفق رمز التفويض (Authorization Code) مع PKCE، وعناوين إعادة توجيه دقيقة، ومعامل state، والاحتفاظ بالسر الخاص بالعميل والرموز على الخادم. أغلب المشكلات تأتي من اختصارات في التنفيذ، ولذلك يُنصح باستخدام مكتبة مُصانة جيدًا.