إتقان مصادقة CLI: الدليل الشامل لجميع الطرق الأربعة
طرق المصادقة الأربعة للـ CLI التي تهمك، كيف تنفذها GitHub و AWS وأدوات الذكاء الاصطناعي، وأخطاء الأمان التي يجب عليك تجنبها.
كل أداة أوامر خاصة بالمطورين (CLI) تأتي مع الأمر login كأول أمر. وكل واحدة منها تحل المصادقة بطريقة مختلفة.
تعرض لك GitHub رمزًا وتفتح متصفحك للتحقق منه. تفتح AWS المتصفح لتسجيل دخول مبني على PKCE. تطلب منك Stripe تأكيد رمز الاقتران في لوحة التحكم. أدوات الذكاء الاصطناعي الأحدث (Claude Code، OpenAI Codex CLI، Cursor) اختارت كل واحدة منها نهجها الخاص أيضًا.
إذا كنت تبني CLI، فإن المصادقة هي من أولى الأمور التي يجب أن تحددها. اختيار الطريقة الخطأ سيجلب لك المشاكل: مستخدمون محبطون، تدقيقات أمنية، أو كلاهما. ومع الموجة الأخيرة من وكلاء الترميز بالذكاء الاصطناعي الذين يستدعون أدوات CLI بشكل برمجي، أصبحت المخاطرة أكبر: أنت لا تصادق إنساناً فقط الآن. ربما تسلم الاعتمادات لعملية ذاتية التشغيل.
إليك الطرق الأربعة للمصادقة التي تهم، كيف تنفذها أكبر الأدوات، والأخطاء التي يجب أن تتجنبها.
الطرق الأربعة باختصار
قبل الدخول بالتفاصيل، إليك مقارنة سريعة:
| الطريقة | الأنسب لـ | الأمان | هل تحتاج متصفحًا؟ |
|---|---|---|---|
| تدفق رمز الجهاز OAuth | البيئات بدون واجهة، SSH | عالي | لا (على نفس الجهاز) |
| OAuth المعتمد على المتصفح (إعادة توجيه عبر localhost) | التطوير المحلي | الأعلى | نعم |
| مفاتيح API / رموز الوصول الشخصي | الأتمتة، CI/CD، النماذج السريعة | متوسط | لا |
| بيانات الاعتماد للعميل | آلة إلى آلة، الخدمات | عالي | لا |
لكل طريقة مميزات وعيوب. هذا ما تحتاج معرفته عن كل واحدة.
1. تدفق رمز الجهاز OAuth (RFC 8628)
هذه هي الطريقة التي يعرض فيها CLI الخاص بك رمزًا مثل ABCD-1234 ورابطًا، ثم يخبرك بفتح هذا الرابط على أي جها ز وإدخال الرمز.
من يستخدمها: GitHub CLI (الافتراضي)، Azure CLI (باستخدام --use-device-code)، Vercel CLI (انتقلت مؤخرًا إلى هذه كخيار افتراضي)، OpenAI Codex CLI (كخيار تجريبي)
كيف تعمل
- تقوم بتشغيل
cli login - يطلب CLI رمز الجهاز من خادم المصادقة، بإرسال
client_idوالنطاقات المطلوبة - يعيد الخادم ثلاث أشياء:
device_code(معرف داخلي)،user_code(الرمز القصير الذي تدخله)، وverification_uri(الرابط الذي تذهب إليه) - يعرض CLI الرمز والرابط ويبدأ في الاستفسار من خادم المصادقة كل 5+ ثوانٍ
- تفتح الرابط من أي جهاز (جوال، كمبيوتر محمول، أو كمبيوتر آخر)، وتدخل الرمز وتوثق بأي طريقة (كلمة مرور، SSO، مفاتيح مرور، MFA ...إلخ)
- بعد الموافقة، يعيد الاستفسار التالي رمز وصول ورمز تحديث
- يخزن CLI الرموز وانتهى الأمر
لماذا يفضلها المطورون
النقطة الأساسية: تعمل في أي مكان. جلسة SSH إلى خادم بعيد؟ تعمل. داخل حاوية Docker؟ تعمل. بيئة تطوير سحابية دون متصفح محلي؟ تعمل. المتصفح لا يجب أن يكون على نفس الجهاز مع CLI.
تدعم كامل نطاق مصادقات المؤسسات (SAML، OIDC، MFA) لأن كل ذلك يتم في المتصفح، ليس في الطرفية. CLI لا يرى أبداً كلمة مرورك.
نقطة الضعف الأمنية التي يجهلها الكثير
تدفق رمز الجهاز يعاني مشكلة تصيد. يمكن للمهاجم إنشاء طلب رمز جهاز، الحصول على رمز مستخدم شرعي، وخداعك لإدخاله، مؤديًا إلى تفويض جلسة المهاجم. هذه ليست نظرية فقط. وثق باحثون أمنيون هذا الهجوم ضد مصادقة AWS SSO برمز الجهاز.
هذا الأمر خطير بما فيه الكفاية حتى أن AWS غيرت إعدادها الافتراضي. بدءًا من AWS CLI v2.22.0، أصبح الافتراضي لـ aws sso login استخدام تدفق رمز التفويض المبني على PKCE. لا يزال رمز الجهاز متاحًا عبر --use-device-code، لكنه لم يعد المسار الافتراضي.
في المقابل، بدأ مستأجر مايكروسوفت بحظر تدفق رمز الجهاز تمامًا عبر سياسات الوصول المشروط، وهذا إشارة قوية أنهم يعتبرونه طريقة عالية الخطورة.
إذاً لدينا انقسام مثير: اعتمدت Vercel تدفق رمز الجهاز كإعداد افتراضي في سبتمبر 2025، بينما ابتعدت AWS عنه. النموذج هو أن تد فق رمز الجهاز رائع عندما لا يمكنك فتح المتصفح فعلاً، لكن إذا كنت تستطيع، فإن PKCE أكثر أمانًا.
من ناحية مزودي المصادقة، الطلب بوضوح يتزايد. أطلقت Logto (https://logto.io) دعم OAuth 2.0 Device Authorization Grant للتطبيقات المحلية في v1.38.0 (مفتوح المصدر) و Logto Cloud، وبالتالي يمكنك الآن تفعيل تدفق الجهاز كطريقة تفويض لأي تطبيق محلي. هذا مهم إذا كنت تبني CLI. تنفيذ RFC 8628 بشكل صحيح (انتهاء صلاحية الرموز، تحديد المعدل، منطق الاستفسار، UX تسجيل الدخول في صفحة التحقق) يتطلب وقتًا وجهدًا أكبر مما يتوقع أغلب الفرق، ووجود مزود مصادقة يدير ذلك يجعل الأمر أبسط بكثير.
تفاصيل تقنية من RFC
بعض الأمور المهمة من RFC 8628:
- قيمة
expires_inلرموز الجهاز تحدد من مزود المصادقة. مثال RFC هو 1800 ثانية (30 دقيقة) لكن ليست إلزامية. - إذا لم يحدد الخادم فاصل الاستفسار، يجب أن تعتمد العملاء على 5 ثوانٍ افتراضيًا.
- إذا حصلت على خطأ
slow_down، زد الفاصل الزمني 5 ثوانٍ إضافية. - يجب أن تكون رموز الجهاز لمرة واحدة وتنتهي بسرعة.
- يجب أن تتم جميع تبادلات الرموز عبر HTTPS.

