Oauthlib: حالات HTTP غير صالحة عند الاستجابة للخطأ

تم إنشاؤها على ١٥ سبتمبر ٢٠١٤  ·  11تعليقات  ·  مصدر: oauthlib/oauthlib

RFC 6749 القسم 5.2 (http://tools.ietf.org/html/rfc6749#section-5.2) يصف استجابة الخطأ. تقول أن الخادم يجب أن يستجيب باستخدام HTTP 400 (طلب غير صالح). لكن oauthlib يستخدم HTTP 401 (غير مصرح به) بدلاً من ذلك لأخطاء مثل InvalidClientError و InvalidGrantError و UnauthorizedClientError والأخطاء الأخرى ذات الصلة.

على سبيل المثال https://github.com/idan/oauthlib/blob/master/oauthlib/oauth2/rfc6749/errors.py#L181

Contributor Friendly

التعليق الأكثر فائدة

قبل إحراز تقدم في هذا الأمر ، أود أن ألخص المناقشة التي حدثت في الماضي.

  1. invalid_client ، حيث يجب أن يكون 401 إذا تم استخدام مصادقة HTTP ، وإلا فقد يكون 401 .
  2. invalid_token ، حيث يجب أن يكون 401 .

في أي حال ، إذا تم استخدام 401 # $ ، يجب تعيين WWW-Authenticate ( RFC2616 ).

تطبيقات OAuth2.0 الأخرى

نظرة عامة سريعة على تطبيقات OAuth2.0 الأكثر شيوعًا مشابهة للإجماع العام:

الخلاصة

يتعين علينا التوافق مع RFC ، ولكن حتى لا نكسر أي تطبيقات ، يجب ألا ندرج هذه التغييرات في الإصدار 2.xx ، ولكن ننتظر حتى 3.xx

من فضلك ، لا تتردد في الرنين.

ال 11 كومينتر

تشير المواصفات إلى أنه يمكن استخدام 401 مع أخطاء العميل غير الصالحة ويجب استخدامه عند إجراء المصادقة عبر حقل رأس التفويض. على الرغم من أن oauthlib لا يقوم حاليًا بأي شيء يشير إلى أنه يجب تضمين حقل رأس "WWW-Authenticate" في الاستجابة كما تتطلب المواصفات. أعتقد أن الاحتفاظ بالرقم 401 لهذا الخطأ أمر جيد ولكن يجب علينا إضافة اقتراح رأس إلى الاستثناء.

فيما يتعلق بالمواصفات الأخرى ، لا تنص المواصفات صراحةً على أنه يمكن استخدام 401 ، وبالتالي ينبغي علينا التفكير في التغيير إلى 400. ومع ذلك ، يبدو أكثر ملاءمة مع 401 في كل من المنح غير الصالحة وأخطاء العميل غير المصرح بها بشكل خاص.

asteinlein ، lepture ، masci الأفكار؟

@ ib-lundgren مرحبًا - تعثرت للتو في هذه المشكلة بالذات وأريد أن تتناغم معها. من قراءة المواصفات والبحث حول الإجابات الأخرى ، يعد IMO a 400 هو الاستجابة الصحيحة.

أولاً ، المواصفات:

يستجيب خادم التفويض بـ HTTP 400 (طلب غير صالح)
رمز الحالة (ما لم يتم تحديد خلاف ذلك) ويتضمن ما يلي
المعلمات مع الاستجابة:

ليس هناك ما يلزم في 400 متطلبات ، ولكن ليس هناك أيضًا.

ثانيًا ، والسبب في أنني تعثرت في هذا كان من خلال خطأ من نوع ما في الشمس JDK على عميلي (انظر هنا: http://stackoverflow.com/a/7524681/1137254)

بشكل أساسي ، سيغلق مكدس HTTP الخاص بعميلي الاتصال مبكرًا لـ 401 ، لكن مكدس OAuth أعلاه (google-http-oauth-client) سيحاول متابعة قراءة النتائج وتحليلها. أعتقد أن هذا تمت كتابته في OpenJDK وفقًا للتعريف والتوقعات حول 401 (تحديث: يتعلق الأمر في الواقع بوضع "البث"). IMO OpenJDK خاطئ أيضًا وأعتقد أنني قد واجهت هذه المشكلة نفسها إذا كنت سأحصل على 401 "غير صالح" أثناء طلبات نقطة النهاية / الرمز المميز.

إضافة تصويت آخر لـ 400 هو رمز الخطأ الصحيح هنا. اعتدنا على استخدام مزود django-oauth2 لمصادقة oauth2 من تطبيقات الأجهزة المحمولة ، وأعاد 400 في هذه الحالة. عند التبديل إلى مجموعة أدوات django-oauth-toolkit (التي تستخدم oauthlib) للترقية إلى إصدارات أحدث من Django ، كان علينا اختراق عرض طلب الرمز المميز لإرجاع 400 بدلاً من ذلك للحفاظ على عمل تطبيقات الجوال بشكل صحيح.

إليك أحد مؤلفي المواصفات التي تنص على وجه التحديد على أن 400 هي الاستجابة المقصودة لبيانات اعتماد المصادقة غير الصالحة عند طلب رمز مميز ، والسبب في ذلك: https://www.ietf.org/mail-archive/web/oauth/current/msg02127 .لغة البرمجة

وإليك مثال آخر لمشروع يواجه مشكلة في التعامل مع oauthlib باستخدام 401 في هذه الظروف.

+1 مقابل 400

صوت لـ 400

أنا أقوم بإحياء هذا الموضوع القديم وأبدأ العلاقات العامة بالتغييرات المقترحة أعلاه.

قبل إحراز تقدم في هذا الأمر ، أود أن ألخص المناقشة التي حدثت في الماضي.

  1. invalid_client ، حيث يجب أن يكون 401 إذا تم استخدام مصادقة HTTP ، وإلا فقد يكون 401 .
  2. invalid_token ، حيث يجب أن يكون 401 .

في أي حال ، إذا تم استخدام 401 # $ ، يجب تعيين WWW-Authenticate ( RFC2616 ).

تطبيقات OAuth2.0 الأخرى

نظرة عامة سريعة على تطبيقات OAuth2.0 الأكثر شيوعًا مشابهة للإجماع العام:

الخلاصة

يتعين علينا التوافق مع RFC ، ولكن حتى لا نكسر أي تطبيقات ، يجب ألا ندرج هذه التغييرات في الإصدار 2.xx ، ولكن ننتظر حتى 3.xx

من فضلك ، لا تتردد في الرنين.

لا أستطيع تذكر السبب / العميل (العملاء) الذي جعلني أدفع PR # 247 ، لكني أرى وفهم أسباب التراجع عن ذلك. شكرًا على البحث الرائع JonathanHuot ، والقيام بهذا في 3.x يبدو أنه أفضل طريقة.

ثابت في # 561 / oauthlib> = 3.0.0

وفقًا لـ RFC الذي ذكر أعلاه ، يجب على العميل غير الصالح أيضًا إرجاع الحالة 400 ولكن في الحزمة لا يزال 401

مرحبًا esfandiaryfard ، هل يمكنك الإشارة إلى النص الدقيق لـ RFC؟ شكرا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات