http headers - 403 निषिद्ध बनाम 401 अनधिकृत HTTP प्रतिक्रियाएं




http-headers http-status-code-403 (10)

वे लॉग इन नहीं हैं या उचित उपयोगकर्ता समूह से संबंधित नहीं हैं

आपने दो अलग-अलग मामलों को बताया है; प्रत्येक मामले में एक अलग प्रतिक्रिया होनी चाहिए:

  1. अगर वे बिल्कुल लॉग इन नहीं हैं तो आपको 401 अनधिकृत लौटा देना चाहिए
  2. अगर वे लॉग इन हैं लेकिन उचित उपयोगकर्ता समूह से संबंधित नहीं हैं, तो आपको 403 निषिद्ध वापसी करनी चाहिए

इस उत्तर में प्राप्त टिप्पणियों के आधार पर आरएफसी पर ध्यान दें:

यदि उपयोगकर्ता लॉग इन नहीं है तो वे अनधिकृत हैं, जिनमें से HTTP समकक्ष 401 है और इसे भ्रामक रूप से आरएफसी में अनधिकृत कहा जाता है। 401 अनधिकृत के लिए धारा 10.4.2 राज्यों के रूप में:

"अनुरोध के लिए उपयोगकर्ता प्रमाणीकरण की आवश्यकता है ।"

यदि आप अनधिकृत हैं, तो 401 सही प्रतिक्रिया है। हालांकि अगर आप अनधिकृत हैं, अर्थात् सही अर्थ में, 403 सही प्रतिक्रिया है।

एक ऐसे वेब पेज के लिए जो मौजूद है, लेकिन जिसके लिए उपयोगकर्ता के पास पर्याप्त विशेषाधिकार नहीं हैं, (वे लॉग इन नहीं हैं या उचित उपयोगकर्ता समूह से संबंधित नहीं हैं), सेवा के लिए उचित HTTP प्रतिक्रिया क्या है? 401? 403? कुछ और? मैंने जो कुछ भी पढ़ा है, वह दोनों के बीच के अंतर पर बहुत स्पष्ट नहीं है। प्रत्येक प्रतिक्रिया के लिए केस का क्या उपयोग उपयुक्त है?


टी एल; डॉ

  • 401: एक इनकार जो प्रमाणीकरण के साथ करना है
  • 403: एक इनकार जो प्रमाणीकरण के साथ कुछ भी करने के लिए नहीं है

प्रैक्टिकल उदाहरण

अगर apache प्रमाणीकरण की आवश्यकता है ( .htaccess माध्यम से), और आप Cancel , यह 401 Authorization Required साथ जवाब देगा

अगर nginx को एक फाइल मिलती है, लेकिन उसे पढ़ने / एक्सेस करने के लिए कोई एक्सेस अधिकार (उपयोगकर्ता / समूह) नहीं है, तो यह 403 Forbidden

आरएफसी (2616 धारा 10)

401 अनधिकृत (10.4.2)

मतलब 1: प्रमाणित करने की आवश्यकता है

अनुरोध के लिए उपयोगकर्ता प्रमाणीकरण की आवश्यकता है। ...

मतलब 2: प्रमाणीकरण अपर्याप्त

... अगर अनुरोध में पहले से ही प्राधिकरण प्रमाण-पत्र शामिल हैं, तो 401 प्रतिक्रिया इंगित करती है कि उन प्रमाण-पत्रों के लिए प्राधिकरण को अस्वीकार कर दिया गया है। ...

403 निषिद्ध (10.4.4)

मतलब: प्रमाणीकरण से असंबंधित

... प्राधिकरण मदद नहीं करेगा ...

अधिक जानकारी:

  • सर्वर अनुरोध को समझ गया, लेकिन इसे पूरा करने से इनकार कर रहा है।

  • यह इकाई में इनकार करने के कारण का वर्णन करना चाहिए

  • इसके बजाय स्थिति कोड 404 (नहीं मिला) का उपयोग किया जा सकता है

    (यदि सर्वर क्लाइंट से यह जानकारी रखना चाहता है)


इस मामले पर नवीनतम आरएफसी को देखते हुए ( RFC7231 और RFC7235 ) उपयोग-मामला काफी स्पष्ट लगता है (इटालिक्स जोड़ा गया):

  • 401 unauthenticated ("मान्य प्रमाणीकरण की कमी है"); यानी 'मैं नहीं जानता कि आप कौन हैं, या मुझे विश्वास नहीं है कि आप कौन हैं जो आप कहते हैं।'

अनधिकृत 401

401 (अनधिकृत) स्थिति कोड इंगित करता है कि अनुरोध लागू नहीं किया गया है क्योंकि इसमें लक्षित संसाधन के लिए वैध प्रमाणीकरण प्रमाण-पत्रों की कमी है । एक 401 प्रतिक्रिया उत्पन्न करने वाला सर्वर एक डब्ल्यूडब्ल्यूडब्ल्यू-प्रमाणीकरण हेडर फ़ील्ड (धारा 4.1) भेजना चाहिए जिसमें लक्ष्य संसाधन पर लागू कम से कम एक चुनौती हो।

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

  • 403 unauthorized ("अधिकृत करने से इंकार कर दिया गया है) के लिए है; यानी 'मैं जानता हूं कि आप कौन हैं, लेकिन आपको इस संसाधन तक पहुंचने की अनुमति नहीं है।'

403 निषिद्ध

403 (निषिद्ध) स्थिति कोड इंगित करता है कि सर्वर अनुरोध को समझ गया लेकिन इसे अधिकृत करने से इंकार कर दिया । एक सर्वर जो सार्वजनिक करना चाहता है कि अनुरोध क्यों मना कर दिया गया है, प्रतिक्रिया पेलोड (यदि कोई हो) में उस कारण का वर्णन कर सकता है।

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

एक मूल सर्वर जो एक प्रतिबंधित लक्षित संसाधन के वर्तमान अस्तित्व को "छिपाने" की इच्छा रखता है, इसके बजाय 404 (नहीं मिला) के स्टेटस कोड के साथ प्रतिक्रिया दे सकता है।


इस सवाल को कुछ समय पहले पूछा गया था, लेकिन लोगों की सोच चल रही है।

इस मसौदे में धारा 6.5.3 (फील्डिंग और रेस्केके ​​द्वारा लिखित) स्थिति कोड 403 को आरएफसी 2616 में प्रलेखित एक के लिए थोड़ा अलग अर्थ देता है।

यह दर्शाता है कि कई लोकप्रिय वेब-सर्वर और ढांचे द्वारा नियोजित प्रमाणीकरण और प्राधिकरण योजनाओं में क्या होता है।

मैंने थोड़ा सा जोर दिया है जो मुझे लगता है कि सबसे महत्वपूर्ण है।

6.5.3। 403 निषिद्ध

403 (निषिद्ध) स्थिति कोड इंगित करता है कि सर्वर अनुरोध को समझ गया लेकिन इसे अधिकृत करने से इंकार कर दिया। एक सर्वर जो सार्वजनिक करना चाहता है कि अनुरोध क्यों मना कर दिया गया है, प्रतिक्रिया पेलोड (यदि कोई हो) में उस कारण का वर्णन कर सकता है।

यदि अनुरोध में प्रमाणीकरण प्रमाण-पत्र प्रदान किए गए थे, तो सर्वर उन्हें पहुंच प्रदान करने के लिए अपर्याप्त मानता है। ग्राहक को समान प्रमाण-पत्रों के साथ अनुरोध दोहराना नहीं चाहिए। ग्राहक नए या अलग-अलग प्रमाण-पत्रों के साथ अनुरोध दोहरा सकता है। हालांकि, प्रमाण पत्र से संबंधित कारणों के लिए एक अनुरोध प्रतिबंधित किया जा सकता है।

एक मूल सर्वर जो एक प्रतिबंधित लक्षित संसाधन के वर्तमान अस्तित्व को "छिपाने" की इच्छा रखता है, इसके बजाय 404 (नहीं मिला) के स्टेटस कोड के साथ प्रतिक्रिया दे सकता है।

आप जो भी सम्मेलन का उपयोग करते हैं, महत्वपूर्ण बात यह है कि आपकी साइट / एपीआई में एकरूपता प्रदान करना है।


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

यहां कुछ तर्क दिए गए हैं जिनके तर्क तर्क के साथ प्रमाणीकरण या प्राधिकरण से एक त्रुटि लौटा दी जाएगी।

  • संसाधन को प्रमाणीकरण की आवश्यकता होती है लेकिन कोई प्रमाण-पत्र निर्दिष्ट नहीं किया गया था।

401 : ग्राहक को प्रमाण पत्र निर्दिष्ट करना चाहिए।

  • निर्दिष्ट प्रमाण-पत्र एक अवैध प्रारूप में हैं

400 : यह न तो 401 और न ही 403 है, क्योंकि वाक्यविन्यास त्रुटियों को हमेशा 400 वापस करना चाहिए।

  • निर्दिष्ट प्रमाण-पत्र उस उपयोगकर्ता को संदर्भित करता है जो मौजूद नहीं है

401 : क्लाइंट को वैध प्रमाण-पत्र निर्दिष्ट करना चाहिए।

  • निर्दिष्ट प्रमाण - पत्र अमान्य हैं लेकिन वैध उपयोगकर्ता निर्दिष्ट करते हैं (या एक निर्दिष्ट उपयोगकर्ता के रूप में उपयोगकर्ता निर्दिष्ट नहीं है)।

401 : फिर, क्लाइंट को वैध प्रमाण-पत्र निर्दिष्ट करना चाहिए।

  • निर्दिष्ट प्रमाण-पत्र समाप्त हो गए हैं

401 : यह व्यावहारिक रूप से सामान्य रूप से अमान्य प्रमाण-पत्र होने जैसा ही है, इसलिए क्लाइंट को वैध प्रमाण-पत्र निर्दिष्ट करना चाहिए।

  • निर्दिष्ट प्रमाण-पत्र पूरी तरह मान्य हैं लेकिन विशेष संसाधन पर्याप्त नहीं हैं, हालांकि यह संभव है कि अधिक अनुमति वाले प्रमाण-पत्र हो सकें।

403 : वैध प्रमाण-पत्र निर्दिष्ट करना संसाधन तक पहुंच प्रदान नहीं करेगा, क्योंकि वर्तमान प्रमाण-पत्र पहले ही मान्य हैं लेकिन केवल अनुमति नहीं है।

  • प्रमाण-पत्रों के बावजूद विशेष संसाधन पहुंच योग्य नहीं है

403 : यह क्रेडेंशियल की परवाह किए बिना है, इसलिए मान्य प्रमाण-पत्र निर्दिष्ट करने से मदद नहीं मिल सकती है।

  • निर्दिष्ट प्रमाण-पत्र पूरी तरह मान्य हैं लेकिन विशेष ग्राहक को उनका उपयोग करने से अवरुद्ध कर दिया गया है।

403 : यदि ग्राहक अवरुद्ध है, तो नए प्रमाण-पत्र निर्दिष्ट करने से कुछ भी नहीं होगा।


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

आरएफसी 7235 से (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP / 1.1): प्रमाणीकरण):

3.1। अनधिकृत 401

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

और यह आरएफसी 2616 से है:

10.4.4 403 निषिद्ध

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

संपादित करें: आरएफसी 7231 (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP / 1.1): सेमेन्टिक्स और कंटेंट) 403 के अर्थ को बदलता है:

6.5.3। 403 निषिद्ध

403 (निषिद्ध) स्थिति कोड इंगित करता है कि सर्वर अनुरोध को समझ गया लेकिन इसे अधिकृत करने से इंकार कर दिया। एक सर्वर जो सार्वजनिक करना चाहता है कि अनुरोध क्यों मना कर दिया गया है, प्रतिक्रिया पेलोड (यदि कोई हो) में उस कारण का वर्णन कर सकता है।

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

एक मूल सर्वर जो एक के वर्तमान अस्तित्व को "छिपाने" की इच्छा रखता है
निषिद्ध लक्षित संसाधन मई के बजाय स्थिति कोड के साथ प्रतिक्रिया
404 नहीं मिला)।

इस प्रकार, 403 का मतलब अब कुछ भी हो सकता है। नए प्रमाण-पत्र प्रदान करने से मदद मिल सकती है ... या ऐसा नहीं हो सकता है।


यहां कहीं से भी मेरे सिर में यह आसान है, इसलिए:

401: इसे देखने के लिए आपको HTTP मूल लेख की आवश्यकता है।

403: आप इसे नहीं देख सकते हैं, और HTTP मूल लेख मदद नहीं करेगा।

यदि उपयोगकर्ता को साइट के मानक HTML लॉगिन फॉर्म का उपयोग करके लॉग इन करने की आवश्यकता है, तो 401 उचित नहीं होगा क्योंकि यह HTTP मूल लेख के लिए विशिष्ट है।

मैं 403 का उपयोग करने की अनुशंसा नहीं करता हूं जैसे कि /includes चीजों तक पहुंच से इनकार करना, क्योंकि जहां तक ​​वेब का संबंध है, वे संसाधन बिल्कुल मौजूद नहीं हैं और इसलिए 404 होना चाहिए।

यह 403 को "आपको लॉग इन करने की आवश्यकता है" के रूप में छोड़ देता है।

दूसरे शब्दों में, 403 का अर्थ है "इस संसाधन को HTTP मूल लेख के अलावा किसी अन्य प्रकार की लेख की आवश्यकता है"।

https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2


डैनियल इरविन से स्पष्ट स्पष्टीकरण:

प्रमाणीकरण त्रुटियों के लिए 401 अनधिकृत , HTTP स्थिति कोड के साथ कोई समस्या है। और यह बस है: यह प्रमाणीकरण के लिए है, प्राधिकरण नहीं। एक 401 प्रतिक्रिया प्राप्त करने वाला सर्वर आपको बता रहा है, "आप प्रमाणीकृत नहीं हैं-या तो सभी को प्रमाणीकृत नहीं हैं या गलत तरीके से प्रमाणित नहीं हैं- लेकिन कृपया पुनः प्रमाणित करें और पुनः प्रयास करें।" आपकी सहायता करने के लिए, इसमें हमेशा एक डब्ल्यूडब्ल्यूडब्लू-प्रमाणीकरण हेडर शामिल होगा जो वर्णन करता है प्रमाणीकरण कैसे करें।

यह आमतौर पर आपके वेब सर्वर द्वारा लौटाई गई प्रतिक्रिया है, न कि आपके वेब एप्लिकेशन।

यह भी कुछ अस्थायी है; सर्वर आपको फिर से प्रयास करने के लिए कह रहा है।

इसलिए, प्राधिकरण के लिए मैं 403 निषिद्ध प्रतिक्रिया का उपयोग करता हूं। यह स्थायी है, यह मेरे आवेदन तर्क से जुड़ा हुआ है, और यह 401 से अधिक ठोस प्रतिक्रिया है।

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

संक्षेप में, 401 अनधिकृत प्रतिक्रिया का उपयोग गायब या खराब प्रमाणीकरण के लिए किया जाना चाहिए, और 403 निषिद्ध प्रतिक्रिया का उपयोग बाद में किया जाना चाहिए, जब उपयोगकर्ता प्रमाणीकृत हो, लेकिन दिए गए संसाधन पर अनुरोधित ऑपरेशन करने के लिए अधिकृत नहीं है।

Http स्टेटस कोड का उपयोग कैसे किया जाना चाहिए इसका एक और अच्छा चित्रमय प्रारूप


RFC2616 देखें:

अनधिकृत 401:

अगर अनुरोध में पहले से ही प्राधिकरण प्रमाण-पत्र शामिल हैं, तो 401 प्रतिक्रिया इंगित करती है कि उन प्रमाण-पत्रों के लिए प्राधिकरण को अस्वीकार कर दिया गया है।

403 निषिद्ध:

सर्वर अनुरोध को समझ गया, लेकिन इसे पूरा करने से इनकार कर रहा है।

अद्यतन करें

आपके उपयोग के मामले से, ऐसा प्रतीत होता है कि उपयोगकर्ता प्रमाणीकृत नहीं है। मैं 401 वापस आऊंगा।

संपादित करें: RFC2616 अप्रचलित है, RFC7231 और RFC7235 RFC7231 देखें।


   GET, resource exists ?
    |      |
 NO |      | YES
    v      v
   404     Is authenticated (logged-in) ?
             |              |
          NO |              | YES
             v              v
             401            Can access resource (has permissions) ?
           (or: 404)        |            |
           or 301        NO |            | YES
           redirect         v            v
           to login        403           OK 200, 301, ...

आमतौर पर चेक इस क्रम में किए जाते हैं:

  • 401 अगर लॉग-इन नहीं है या सत्र समाप्त हो गया है
  • 403 अगर उपयोगकर्ता को संसाधन तक पहुंचने की अनुमति नहीं है
  • 404 अगर संसाधन मौजूद नहीं है

अनौपचारिक : स्थिति कोड (401) यह इंगित करता है कि अनुरोध प्रमाणीकरण की आवश्यकता है , आमतौर पर इसका मतलब है कि उपयोगकर्ता को लॉग-इन (सत्र) होना चाहिए। सर्वर द्वारा अज्ञात उपयोगकर्ता / एजेंट। अन्य प्रमाण पत्र के साथ दोहराना कर सकते हैं। नोट: यह भ्रमित है क्योंकि इसे 'अनधिकृत' के बजाय 'अनधिकृत' नाम दिया जाना चाहिए था। सत्र समाप्त होने पर लॉगिन के बाद भी यह असफल हो सकता है।

फॉरबिडेन : सर्वर को इंगित करने वाला स्टेटस कोड (403) अनुरोध को समझ गया लेकिन इसे पूरा करने से इनकार कर दिया। सर्वर द्वारा ज्ञात उपयोगकर्ता / एजेंट लेकिन अपर्याप्त प्रमाण-पत्र हैं । अनुरोध दोहराना काम नहीं करेगा, जब तक कि क्रेडेंशियल बदल नहीं जाते हैं, जो कि थोड़े समय के दौरान बहुत ही असंभव है।

नहीं मिला : स्थिति कोड (404) इंगित करता है कि अनुरोधित संसाधन उपलब्ध नहीं है। उपयोगकर्ता / एजेंट ज्ञात है लेकिन सर्वर संसाधन के बारे में कुछ भी प्रकट नहीं करेगा, जैसा कि यह अस्तित्व में नहीं है। दोहराना काम नहीं करेगा। यह 404 का एक विशेष उपयोग है (उदाहरण के लिए जिथब करता है)।





http-response-codes