2009-10-24 12 views
30

में प्रमाणीकरण विफलता सिग्नलिंग मैं एक छोटा सा एप्लीकेशन लिख रहा हूं जो एक साधारण REST-ish HTTP API का खुलासा करता है। मैं प्राधिकरण की कमी के कारण विफलता को सिग्नल करने का निर्णय लेने की कोशिश कर रहा हूं।एक विश्वसनीय API

ऐप में प्रमाणीकरण के लिए कोई एपीआई नहीं है, लेकिन इसके बजाय क्लाइंट द्वारा किसी अन्य सेवा के माध्यम से प्राप्त सत्र टोकन युक्त कुकी की उपस्थिति पर निर्भर करता है। ऐप सत्र की पुष्टि करता है और ऐप-विशिष्ट प्रमाणीकरण करने के लिए सत्यापन प्रक्रिया के माध्यम से प्राप्त पहचान का उपयोग करता है। क्लाइंट के लिए सीधे इस ऐप को प्रमाणीकृत करने का कोई तरीका नहीं है।

मेरी समस्या यह है कि अनधिकृत अनुरोधों को अस्वीकार करने के लिए स्पष्ट HTTP स्थिति कोड, "401 अनधिकृत", "WWW-प्रमाणीकरण" शीर्षलेख के संदर्भ में निर्दिष्ट है। rfc2616 sec 10.4.2 देखें।

प्रतिक्रिया एक WWW-प्रमाणित शीर्ष लेख क्षेत्र (अनुभाग 14.47) एक चुनौती अनुरोध किया गया संसाधन के लिए लागू युक्त अवश्य शामिल करें।

मुझे विश्वास नहीं है कि यह एक असामान्य समस्या है। क्या सामान्य उपयोगों को शामिल करने के लिए 401 को अधिभारित करना आम है? ऑथ/ई संवादों को पॉप अप करने वाले ब्राउज़र के बारे में क्या (जो संयोग से मैंने अपने परीक्षण में नहीं देखा है, तो हो सकता है कि यह POSTs के लिए न हो)?

नीचे पंक्ति: क्या इस संदर्भ में 401 का उपयोग करना ठीक है, या क्या कोई बेहतर समाधान है? इस तरह

+5

यदि आप कुकी का उपयोग कर रहे हैं तो यह एक विश्वसनीय API नहीं है। आरईएसटी सेवाएं परिभाषा के आधार पर स्टेटलेस हैं। –

+0

उचित बिंदु - मैंने अपना विवरण रीस्टफुल के बजाय, REST-ish में बदल दिया। तो क्या आपको लगता है कि उत्तर या तो प्रति-अनुरोध प्रमाणीकरण को सही ढंग से कार्यान्वित करने के लिए है, या पुन: प्रयास पर मेरे प्रयास को छोड़ दें? – j0ni

+0

कहना मुश्किल है, यह आपके आवेदन पर निर्भर करता है। आरईएसटी दृष्टिकोण के कुछ फायदे हैं। यदि आप सर्वर-साइड सत्र का उपयोग करना जारी रखना चाहते हैं, तो मैं 403 वापस कर दूंगा क्योंकि tvanfosson ने कहा था। –

उत्तर

30

आमतौर पर, आप एक 401 भेजना चाहते हैं अगर ग्राहक प्रमाणित करने और समस्या का समाधान कर सकते हैं, लेकिन जब से तुम एपीआई में प्रमाणित करने के लिए एक तरीका प्रदान नहीं है, मैं 'डी 403 त्रुटि (वर्जित) को बदले में सुझाव देने का सुझाव देता है। इसके लिए हेडर की आवश्यकता नहीं होगी और क्लाइंट को इंगित करेगा कि यह सेवा तक पहुंचने में असमर्थ है।

+2

यदि अनुरोध विधि HEAD नहीं थी और सर्वर सार्वजनिक करना चाहता है कि अनुरोध पूरा क्यों नहीं हुआ है, तो उसे इकाई में इनकार करने का कारण बताएं। यदि सर्वर क्लाइंट को यह जानकारी उपलब्ध नहीं करना चाहता है, तो स्थिति कोड 404 (नहीं मिला) इसके बजाय उपयोग किया जा सकता है। (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) – vquintans

+1

@ vquintans 404 नहीं मिला ऐसा लगता है कि यह इस मामले में संदिग्ध हो सकता है। मान लें कि क्लाइंट एक विशेष संसाधन का अनुरोध करता है जो मौजूद हो सकता है या नहीं हो सकता है लेकिन कुकी नहीं है? आप 404 त्रुटि की व्याख्या कैसे करेंगे? क्या यह विफल रहा क्योंकि संसाधन अनुपलब्ध था या प्रमाणीकरण त्रुटि के साथ। मैं उस प्रतिक्रिया के साथ रहूंगा जो स्पष्ट रूप से प्राधिकरण की आवश्यकता को इंगित करता है। – tvanfosson

+0

हां, मैं सहमत हूं। लेकिन किसी भी मामले में मुझे लगता है कि आरएफसी की संभावना पर टिप्पणी करना दिलचस्प है। – vquintans

8

वापसी कुछ:

HTTP/1.1 401 Unauthorized 
Location: https://example.com/auth-app/login