HTTP 401 - एक उपयुक्त WWW- प्रमाणीकरण हेडर मूल्य क्या है?


109

इस समय मैं जिस एप्लिकेशन पर काम कर रहा हूं, उसका एक सत्र टाइमआउट मूल्य है। यदि उपयोगकर्ता ने इस मान से अधिक समय तक सहभागिता नहीं की है, तो अगला पृष्ठ जिसे वे लोड करने का प्रयास करते हैं, उन्हें लॉग इन करने के लिए प्रेरित किया जाएगा।

किए गए सभी अनुरोधों को इस तंत्र के माध्यम से रूट किया जाता है, जिसमें AJAX कॉल शामिल हैं। मूल रूप से हम लॉगिन पेज के साथ एक 200 हेडर भेज रहे थे, जो 200 के जवाब में भेजे जाने पर कोड चलने के बाद से AJAX के साथ कुछ समस्याओं का परिचय देता है, और इन RPC कॉल से वापस भेजे गए अधिकांश डेटा JSON या कच्चे जावास्क्रिप्ट हैं जिनका मूल्यांकन किया जाता है (मत करो पूछना:)।

मैंने सुझाव दिया है कि एक 401 बेहतर है, क्योंकि हमारे JSON पार्सर एक HTML लॉगिन पृष्ठ का उपभोग करने की कोशिश नहीं करेंगे .. :)

जब कल्पना पढ़ने , हालांकि, मैंने देखा है कि WWW-Authenticateक्षेत्र भी भेजा जाना चाहिए।

इस क्षेत्र के लिए एक अच्छा मूल्य क्या है? विल Application Loginपर्याप्त?

जवाबों:


67

HTTP बेसिक प्रमाणीकरण का संकेत देते समय हम कुछ इस तरह से लौटते हैं:

WWW-Authenticate: Basic realm="myRealm"

जबकि Basicयोजना है और शेष उस योजना पर बहुत अधिक निर्भर है। इस मामले में दायरे केवल ब्राउज़र को एक शाब्दिक प्रदान करता है जिसे उपयोगकर्ता आईडी और पासवर्ड के लिए संकेत करते समय उपयोगकर्ता को प्रदर्शित किया जा सकता है।

आप स्पष्ट रूप से बेसिक का उपयोग नहीं कर रहे हैं, क्योंकि बेसिक ऑथ का उपयोग किए जाने पर सत्र समाप्ति की कोई बात नहीं है। मुझे लगता है कि आप फ़ॉर्म आधारित प्रमाणीकरण के कुछ रूप का उपयोग कर रहे हैं।

पुनरावृत्ति से, विंडोज चैलेंज रिस्पॉन्स एक अलग योजना और विभिन्न तर्कों का उपयोग करता है।

चाल यह है कि यह ब्राउज़र पर निर्भर है कि यह निर्धारित करता है कि यह किन योजनाओं का समर्थन करता है और यह उनके लिए कैसे प्रतिक्रिया करता है।

यदि आप प्रपत्र आधारित प्रमाणीकरण का उपयोग कर रहे हैं तो मेरी आंत को लगता है कि 200 + पुनः पृष्ठ के साथ रहना है लेकिन एक कस्टम हेडर जोड़ें जो ब्राउज़र को अनदेखा करेगा लेकिन आपका AJAX पहचान सकता है।

वास्तव में अच्छे उपयोगकर्ता + AJAX के अनुभव के लिए, स्क्रिप्ट को AJAX अनुरोध पर लटकने के लिए मिलता है जो सत्र समाप्त हो गया है, एक पॉपअप के माध्यम से एक relogin अनुरोध को बंद करें, और सफलता पर, मूल AJAX अनुरोध को फिर से शुरू करें और सामान्य रूप से जारी रखें।

उस धोखा से बचें, जो सत्र को जीवित रखने के लिए हर 5 मिनट में साइट को हिट करने के लिए स्क्रिप्ट प्राप्त करता है, जो कि सत्र समाप्ति के बिंदु को हरा देता है।

अन्य विकल्प AJAX अनुरोध को जलाता है लेकिन यह एक खराब उपयोगकर्ता अनुभव है।


2
धन्यवाद दोस्त, मैं अब एक 403 का उपयोग कर रहा हूँ क्योंकि यह एक पुनर्निर्देशित नहीं है और इसमें मूल पृष्ठ के स्थान पर लॉगिन फ़ॉर्म शामिल है। यह W3 स्पेसिफिकेशन से भी बेहतर मेल खाता है। हालांकि जानकारी के लिए धन्यवाद।
विल मॉर्गन

2
यह उत्तर देखें कि आप अभी भी HTTP 401 का उपयोग कैसे कर सकते हैं: stackoverflow.com/questions/928874/…
lanoxx

हां, बस कुछ भी WWW-Authenticate हेडर में डाल दें, मुझे लगता है। इसी तरह की नस में एक और जवाब है stackoverflow.com/a/1088127/689161 या बस कल्पना का उल्लंघन करें और हेडर भेजने से परेशान न हों (कम से कम कुछ साइट्स ऐसा करें); 401 अभी भी 403 से अधिक उपयुक्त है।
गेंग्केव

मुझे यकीन नहीं है कि मैं डब्ल्यूडब्ल्यूडब्ल्यू-ऑथेंटिकेट हेडर में "बस कुछ भी डालूंगा" क्योंकि मुझे यकीन नहीं है कि अगर अनुरोध मेरे अजाक्स या ब्राउज़र द्वारा नियंत्रित किया जाता है। इस सवाल के शीर्षक से परे, विवरण दिया गया है जो फ़ॉर्म आधारित प्रमाणीकरण का सुझाव देता है, मैं कोई भी WWW-Authenticate हेडर नहीं भेजूंगा। ऐसा इसलिए है क्योंकि मैं ब्राउज़र को प्रमाणीकरण / क्रेडेंशियल चुनौती बात में भाग लेने के लिए नहीं कह रहा हूं। मैं बस यह चाहता हूं कि यह एक ऐसा रूप दिखाए, जो सिर्फ एक लॉगऑन फॉर्म के रूप में होता है, लेकिन कुछ अजाक्स के साथ यह पहचानने के लिए उपयोग कर सकता है कि यह एक लॉगऑन फॉर्म है, इसलिए यह ऊपर के रूप में इसे अलग तरीके से संभाल सकता है।
स्वानी

आपको शीर्ष लेख के साथ उपयोग करने के लिए एक स्कीम बनानी चाहिए। तब ब्राउज़र शामिल नहीं होगा क्योंकि यह योजना को समझ नहीं पाएगा। यदि आप शीर्ष लेख को शामिल नहीं करते हैं तो कुछ ग्राहक परेशान या भ्रमित हो जाते हैं।
कायदे

7

नहीं, आपको प्रमाणीकरण पद्धति (आमतौर पर "बेसिक") और प्रमाणीकरण क्षेत्र का उपयोग करने के लिए निर्दिष्ट करना होगा। एक उदाहरण अनुरोध और प्रतिक्रिया के लिए http://en.wikipedia.org/wiki/Basic_access_authentication देखें ।

आप RFC 2617 - HTTP ऑथेंटिकेशन: बेसिक और डाइजेस्ट एक्सेस ऑथेंटिकेशन भी पढ़ना चाह सकते हैं ।


-7

जब उपयोगकर्ता सत्र समाप्त हो जाता है, तो मैं एक HTTP 204 स्थिति कोड वापस भेजता हूं। ध्यान दें कि HTTP 204 स्थिति में कोई सामग्री नहीं है। क्लाइंट-साइड पर मैं यह करता हूं:

xhr.send(null);
if (xhr.status == 204) 
    Reload();
else 
    dropdown.innerHTML = xhr.responseText;

यहाँ रीलोड () फ़ंक्शन है:

function Reload() {
    var oForm = document.createElement("form");
    document.body.appendChild(oForm);
    oForm.submit();
    }

6
आप HTTP 204 का उपयोग कैसे कर रहे हैं? developer.mozilla.org/en-US/docs/Web/HTTP/Status/204
मॉर्गन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.