HTTP Basic Authentication Flow Explained

 बेसिक ऑथेंटिकेशन के लिए निम्नलिखित चरणों का समझना जरूरी है।


प्रथम चरण में ब्राउज़र के द्वारा किसी ऐसे रिसोर्स के लिए रिक्वेस्ट भेजा जाता है जो केवल ऑथेंटिकेटेड यूजर को ही मिल सकता है। इस रिसोर्स को प्राप्त करने के लिए सर्वर रिस्पांस के रूप में www-authenticate response हेडर को भेजता है। यह यूजर को चैलेंज करने के लिए ऑथेंटिकेशन तरकीब होता है।

जब क्लाइंट इस रिस्पांस header को प्राप्त करता है तो उसे ज्ञात हो जाता है कि प्रतिबंधित रिसोर्स को पाने के लिए उसे बेसिक ऑथेंटिकेशन स्कीम का अनुपालन करना है क्योंकि रेस्पोंस हेडर WWW-Authenticate: Basic Realm="Admin" भेजा जाता है। ध्यान दीजिए कि realm का मान MyApp, Admin, SecureApp इत्यादि हो सकता है। अतः अगली बार रिक्वेस्ट में क्लाइंट Authentication request हेडर को भेजता है इस header के भीतर base64 में encode किया हुआ यूजर नेम और पासवर्ड होता है।

ध्यान दीजिए की आप तौर पर जब ब्राउज़र को www-authenticate रिस्पांस हेडर प्राप्त होता है तो अगले रिक्वेस्ट में यूजरनेम और पासवर्ड को प्राप्त करने के लिए एक इनपुट बॉक्स प्रकट करता है। यह ब्राउज़र का बना हुआ इनपुट बॉक्स होता है जिसके भीतर यूजरनेम और पासवर्ड को यूजर द्वारा इनपुट किया जाता है। इस यूजर नेम और पासवर्ड को इनकोडिंग करके क्लाइंट ब्राउज़र सरवर के पास भेज देता है। यदि यूजर नेम और पासवर्ड सर्वर पर मैच कर जाता है तब यूजर को प्रतिबंधित रिसोर्स का अधिकार मिल जाता है।

यदि यूजर ऑथेंटिकेट हो जाता है तो बाद के सभी रिक्वेस्ट में भेजने के लिए क्लाइंट बेस 64 में एनकोडेड यूज़रनेम पासवर्ड डाटा को एक सुरक्षित मेमोरी में संरक्षित कर लेता है। यह डेटा मेमोरी में तब तक सुरक्षित रहता है जबतक यूजर का वर्तमान सेशन चल रहा होता है। बाद के सभी अनुरोध में सर्वर इस एनकोडेड यूजरनेम और पासवर्ड को प्राप्त करता और validate करता है।

क्यों हर बार validation होता है?

HTTP एक stateless protocol है, यानी सर्वर किसी भी पिछले रिक्वेस्ट को याद नहीं रखता। इसलिए:

  • हर नई HTTP request अपने आप में independent होती है
  • इसलिए क्लाइंट (ब्राउज़र) को हर बार Authorization header भेजना पड़ता है
  • और सर्वर को हर बार उस header को verify करना पड़ता है।  

महत्त्वपूर्ण तथ्य

ध्यान दीजिए कि Basic Authentication में हर request में credentials भेजे जाते हैं, हर request पर server validation करता है और server कोई login state store नहीं करता।  अतः यह तकनीक कुछ हद तक inefficient और risky है।  ध्यान दीजिए कि Base64 encryption नहीं है, सिर्फ encoding है इसलिए इसे भेजते समय HTTPS अनिवार्य होता है।

सम्बन्धित लेख HTTP Basic Authentication in ASP.NET Core Razor Pages

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks