2012-07-30 17 views
55

यह एक वैचारिक प्रश्न है।विश्वसनीय लॉगिन विफलता: वापसी 401 या कस्टम प्रतिक्रिया

मेरे पास एक क्लाइंट (मोबाइल) एप्लिकेशन है जिसे एक विश्वसनीय वेब सेवा के खिलाफ लॉगिन कार्रवाई का समर्थन करने की आवश्यकता है। चूंकि वेब सेवा रीस्टफुल है, यह उपयोगकर्ता से उपयोगकर्ता नाम/पासवर्ड स्वीकार करने वाले ग्राहक को सेवा प्रदान करता है, जो सेवा के साथ उपयोगकर्ता नाम/पासवर्ड सत्यापित करता है, और उसके बाद सभी उपयोगकर्ता अनुरोधों के साथ उस उपयोगकर्ता नाम/पासवर्ड को भेजना याद रखता है।

इस वेब सेवा में अन्य सभी प्रतिक्रियाएं JSON प्रारूप में उपलब्ध कराई गई हैं।

सवाल यह है कि, जब मैं वेब सेवा से पूछता हूं कि यह पता लगाने के लिए कि क्या दिया गया उपयोगकर्ता नाम/पासवर्ड मान्य है, तो वेब सेवा हमेशा जेएसओएन डेटा के साथ प्रतिक्रिया देनी चाहिए जो मुझे सफल या असफल बताती है, या इसे HTTP 200 पर वापस करना चाहिए खराब प्रमाण-पत्रों पर अच्छे प्रमाण-पत्र और HTTP 401।

कारण मैं पूछता हूं कि कुछ अन्य विश्वसनीय सेवाएं खराब प्रमाण-पत्रों के लिए 401 का उपयोग करती हैं, भले ही आप केवल पूछ रहे हों कि प्रमाण-पत्र मान्य हैं या नहीं। हालांकि, 401 प्रतिक्रियाओं की मेरी समझ यह है कि वे ऐसे संसाधन का प्रतिनिधित्व करते हैं जिनके पास आपको वैध प्रमाण-पत्रों तक पहुंच नहीं है। लेकिन लॉगिन संसाधन किसी के लिए सुलभ होना चाहिए क्योंकि लॉगिन संसाधन का पूरा उद्देश्य आपको यह बताने के लिए है कि क्या आपके प्रमाण पत्र वैध हैं।

दूसरे शब्दों में, मुझे लगता है कि जैसे एक अनुरोध:

myservice.com/this/is/a/user/action 

401 लौटना चाहिए अगर बुरा क्रेडेंशियल्स प्रदान की जाती हैं। लेकिन एक अनुरोध:

myservice.com/are/these/credentials/valid 

कभी भी 401 वापस नहीं करना चाहिए क्योंकि वह विशेष URL (अनुरोध) वैध प्रमाण-पत्रों के साथ या बिना अधिकृत है।

मैं कुछ उचित विचारों को एक या दूसरे तरीके से सुनना चाहता हूं। इसे संभालने का मानक तरीका क्या है, और यह तर्कसंगत रूप से उचित तरीके से संभालने का मानक तरीका है?

उत्तर

71

पहले बंद करें। 401 एक असफल लॉगिन हुआ है जब भेजने के लिए उचित प्रतिक्रिया कोड है।

401 अनधिकृत 403 निषिद्ध की तरह, लेकिन विशेष रूप से उपयोग जब प्रमाणीकरण की आवश्यकता है और असफल हो गया है या अभी तक नहीं प्रदान किया गया है। प्रतिक्रिया में डब्ल्यूडब्ल्यूडब्लू-प्रमाणीकरण हेडर फ़ील्ड शामिल होना चाहिए जिसमें अनुरोधित संसाधन पर लागू एक चुनौती शामिल है।

के बारे में, myservice.com/are/these/credentials/valid आपका भ्रम वापस 401 भेजने का सिर्फ एक चेक करते हैं, मुझे लगता है कि तथ्य यह है कि बाकी में बूलियन अनुरोध कर अक्सर RESTful की कमी से गलत है पर आधारित है। प्रत्येक अनुरोध को संसाधन वापस करना चाहिए। एक भरोसेमंद सेवा में बुलियन प्रश्न करना आरपीसी के लिए एक फिसलन sloop है।

अब मुझे नहीं पता कि आपने जिस सेवा पर देखा है वह व्यवहार कर रहा है। लेकिन इसे हल करने का एक अच्छा तरीका खाता ऑब्जेक्ट जैसा कुछ है, जिसे आप प्राप्त करने का प्रयास करते हैं। यदि आप प्रमाण-पत्र सही हैं, तो आप खाता ऑब्जेक्ट प्राप्त करेंगे, अगर आप बैंडविड्थ को "चेक" करने के लिए बर्बाद नहीं करना चाहते हैं तो आप उसी संसाधन पर एक हेड कर सकते हैं।

एक खाता ऑब्जेक्ट उन सभी अजीब बुलियन मूल्यों को स्टोर करने के लिए भी एक अच्छी जगह है जो अन्यथा व्यक्तिगत संसाधन बनाने के लिए मुश्किल हो जाएगा।

+1

संसाधनों को वापस करने के बारे में आपका बिंदु मान्य लगता है और शायद यह सही कदम है। यह बताते हुए कि 401 उचित प्रतिक्रिया है, मैं वहां कुछ स्पष्टीकरण की सराहना करता हूं। मैंने HTTP spec पढ़ा है, जैसा कि आपने यहां शामिल किया है, लेकिन मेरे लिए यह आपके दावे की प्रत्यक्ष और स्पष्ट पुष्टि के रूप में नहीं पढ़ता है। अर्थात्, प्रमाणीकरण की वैधता के बारे में पूछने के लिए प्रमाणीकरण की आवश्यकता नहीं है - फिर भी जो आपने शामिल किया है, वह कहता है "प्रमाणीकरण की आवश्यकता होने पर विशेष रूप से उपयोग के लिए।" – Matt

+2

इसे देखने का आपका तरीका सही है। आपको अपने खाता ऑब्जेक्ट के लिए पूछने में सक्षम होने के लिए प्रमाणित होने की आवश्यकता नहीं है। लेकिन संसाधन को प्राप्त करने में सक्षम होने के लिए आपको सफलतापूर्वक प्रमाणित करने की आवश्यकता है, और जहां 'प्रमाणीकरण की आवश्यकता है और विफल रहा है या अभी तक प्रदान नहीं किया गया है' लागू होता है, क्योंकि आप प्रमाण-पत्रों की वैधता नहीं मांगते हैं, लेकिन एक विशिष्ट संसाधन के लिए आपके द्वारा प्रदान किए जाने वाले प्रमाण-पत्रों के आधार पर। – Cleric

+0

ठीक है, मुझे लगता है कि मैंने अपनी टिप्पणी अस्पष्टता से कहा था। यदि खाता संसाधन वापस कर दिया गया है, तो मैं आपके उसी पृष्ठ पर हूं - मैं आपके रुख से सहमत हूं। जब मैंने 401 के बारे में फिर से पूछा तो मेरा मतलब केवल उस मामले के संबंध में जहां मैं वैधता मांग रहा हूं। मैं समझता हूं कि यह एक आरईएसटी दृष्टिकोण से "गलत" है, लेकिन मैं इस प्रश्न के लिए एक निष्कर्ष तक पहुंचना चाहता हूं। तो अगर मैं गलत काम करता हूं और बुलियन रिटर्न के रूप में वैधता मांगता हूं, तो क्या यह 401 वापस करने के लिए अनुचित होगा कि प्रमाणीकरण वास्तव में उस अनुरोध/क्वेरी के लिए आवश्यक नहीं है? – Matt