سؤال

أقوم بإنشاء تطبيق ويب مقره على الصلب مع API مريح، والذي يفتقر حاليا إلى أي مصادقة. لذلك سأقوم بتنفيذ ذلك وتجنب كل المشاكل والحذر مع تخزين كلمات مرور المستخدم، أود استخدام OpenID للمصادقة. ما هي أفضل طريقة للقيام بذلك؟ هل هذين الأمرين متوافقين؟ هل هناك راحة باقي أبيس الموجودة تستخدم OpenID أنني أستطيع أن آخذ إلهام؟

هل كانت مفيدة؟

المحلول

لقد أمضيت الآن بعض الوقت في البحث في الخيارات وترغب في تلخيص النتائج. أولا، المزيد من السياق قليلا - أقوم بتطوير والسيطرة على كل من الخدمة والمستهلك API. المستهلك هو التطبيق القائم على الفلاش الذي يتم تقديمه من نفس المضيف الذي أصبح فيه API الآن ومن المفترض أن تستخدم في المتصفح. لا عملاء طرف ثالث في الأفق حتى الآن.

لذلك يمكن تقسيم السؤال في جزأين،

  • كيف أقوم بمصادقة OpenID عبر API
  • كيف يمكنني الحفاظ على الدولة "المصادقة" في الطلبات اللاحقة

بالنسبة للجزء الأول، تشمل المصادقة OpenID دائما خطوات تفاعلية تقريبا. خلال عملية المصادقة، سيكون هناك على الأرجح خطوة حيث يوجد المستخدم في صفحة الويب الخاصة بموفر OpenID، وتسجيل الدخول والضغط على بعض زر "أوافق". لذلك لا يمكن ل API ويجب ألا تتعامل مع هذا بشفافية (لا "أخبرني مزود OpenID وكلمة المرور وسأفعل الباقي"). أفضل ما يمكن القيام به هو تمرير الروابط HTTP وظهر مرة أخرى أن العميل يجب أن يفتح واتبع التعليمات.

الحفاظ على الدولة "مصادقة"

يجب أن يكون راحة واجهات برمجة التطبيقات عديمة الجنسية عديمة الجنسية، يجب أن يتضمن كل طلب جميع المعلومات اللازمة للتعامل معها، أليس كذلك؟ لن يكون له أي معنى للمصادقة ضد مزود OpenID لكل طلب، لذلك بعض نوع من الجلسة غير ضرورية. بعض خيارات التواصل مع مفتاح الجلسة (أو "رمز الوصول" أو اسم المستخدم / كلمة المرور) هي:

  • HTTPS + المصادقة الأساسية ("إذن: Basic ..." رأس في كل طلب)
  • طلبات التوقيع نمط الأمازون ("إذن: AWS ..." رأس في كل طلب)
  • OAuth: الحصول على رمز الوصول، ويشمل ذلك وحفنة من المعلمات الأخرى في كل طلب
  • ملف تعريف الارتباط الذي يخزن مفتاح الجلسة ("كوكي: ..." رأس في كل طلب)
  • تم توقيع ملف تعريف الارتباط الذي يخزن معلومات الجلسة في ملف تعريف الارتباط نفسه

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

BEACER لديها أيضا ميزة لطيفة من جلسات تعريف الارتباط فقط حيث توجد جميع بيانات الجلسة في ملف تعريف الارتباط نفسها. أعتقد أن هذا هو عديم الجنسية كما يحصل. هنالك رقم متجر الجلسة على الخادم. يتم توقيع ملفات تعريف الارتباط وشفرت اختياريا لتجنب العبث بها في جانب العميل. العيب هو أن ملف تعريف الارتباط يزيد قليلا، لأنه يحتاج الآن إلى تخزين أكثر من مجرد مفتاح جلسة. عن طريق إزالة بعض الأشياء، لم أحسب حقا في الجلسة (بقايا المصادقة OpenID) حصلت على حجم ملف تعريف الارتباط إلى حوالي 200 بايت.

نصائح أخرى

OAuth. هو أفضل مناسبا لاستخدام API. إليك مثال على OAuth قيد الاستخدام في بيثون: Oauth-Python-Twitter. وبعد ليا كولفر Python-oauth. المكتبة هي التنفيذ القانوني لل Oauth في بيثون، ولكن python-oauth2. هو المنافس الأخير الذي يحصل على بعض الطنانة. أما بالنسبة للإلهام، django-piston. لديه دعم لاستخدام OAuth للقيام بالمصادف عند إنشاء واجهات برمجة تطبيقية مريحة ل Django، على الرغم من أن الوثائق ليست لطيفة كما أردت لهذا الموضوع بالذات.

إذا قمت ببناء API، يمكنك التحقق من بروتوكول OAUTH. انها مكملة للفتح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top