ajax 100% एजेएक्स नहीं होने वाले एक अजाक्स एप्लिकेशन में HTTP प्रमाणीकरण का उपयोग करने का सबसे अच्छा तरीका क्या है I




jquery xmlhttprequest (4)

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

लेकिन आप अपने उपयोगकर्ता द्वारा दिए गए रहस्यों को शामिल करते हुए स्मृति लीक के बारे में भी सवाल पूछ रहे हैं। अच्छा सवाल लेकिन जवाब देने के लिए एक जनरल स्टैब लेने के लिए कि मैं कह सकता हूं कि यह ब्राउज़र विशिष्ट होना होगा। यह ब्राउज़र इंटरनल, जावास्क्रिप्ट इंजन इंटरनल-निर्भर है, जहां क्लाइंट साइड एप्लिकेशन (ब्राउज़र में ब्राउज़र या जेएस) उपयोगकर्ता इनपुटों को संचित कर रहा है।

सबसे अधिक संभावना है कि उन मूल्यों को बेहिसास रूप से पूरे स्मृति में दोहराया नहीं जाता है, लेकिन गारंटी देने का कोई तरीका नहीं है। जिम्मेदार जावास्क्रिप्ट कोडिंग प्रथाओं के अलावा, उपयोगकर्ता इनपुट के स्थानों की सीमा की गारंटी के लिए आप कुछ भी नहीं कर सकते।

थोड़ा विषमता

मूल बिंदु यह है कि यदि आप इसे क्लाइंट पर संग्रहीत करते हैं जो वास्तव में सुरक्षित नहीं है - जब तक कि ग्राहक को एन्क्रिप्टेड जानकारी की कुंजी के साथ एन्क्रिप्ट की गई जानकारी केवल सर्वर (या उपयोगकर्ता अपने सही क्रेडेंशियल के माध्यम से) तो आप सोच सकते हैं कि क्लाइंट पर कुछ प्रामाणिक कार्य करने के लिए जेएस एप्लिकेशन को कोडित किया जायेगा - उतना ही उतना ही होगा जितना बैंक कार्ड (पीएसीएस) को पिन पर पिन को चेक करके और डीबी पर वापस नहीं किया गया। यह (कुछ नकली) धारणा के आधार पर है, उपयोगकर्ता के बैंक कार्ड पर क्लाइंट / मेग स्ट्रीप पर "डार्क एरिया" कुकी / स्थानीय स्टोरेज पर सीधा पढ़ने / लिखना नहीं है। इसलिए मैं केवल इसे झूठी आस्थाओं के लिए अयोग्यता के रूप में सलाह दूँगा और क्रेडेंशियल के लिए एकमात्र योग्यता के रूप में नहीं।

मुख्य मुद्दा

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

मेरे पास एक मानक HTML लॉगिन पृष्ठ है, जो मैं ब्राउज़रों द्वारा प्रदत्त मानक HTTP प्रमाणीकरण पॉप-अप की अपेक्षा अधिक उपयोग करूँगा। आज, मैं लॉग इन करने के बाद सत्र का ट्रैक रखने के लिए सत्र कुकीज का उपयोग कर रहा हूं, लेकिन मैं स्टेटलेस होना चाहता हूं और हर बार HTTP प्रमाणीकरण पास करना चाहता हूं। मैं जो वेब सेवाओं को मार रहा हूं, इससे पहले ही इसका समर्थन है, इसलिए यह केवल एक ब्राउज़र-आधारित समस्या है।

प्रमाणीकरण क्रेडेंशियल जोड़ना jQuery में तुच्छ है, लेकिन मुझे नहीं पता कि उन्हें कैसे रखने के लिए। यदि आप लॉगिन पेज (एक जेएसपी) से होम पेज पर (दूसरे जेएसपी) जाते हैं तो आप स्पष्ट रूप से लॉगइन पेज से उपयोगकर्ता नाम और पासवर्ड फ़ील्ड नहीं रखते हैं। मुझे पता है कि कुछ ब्राउज़र आपके HTTP प्रमाणीकरण क्रेडेंशियल्स को संग्रहीत करेंगे यदि आप उन्हें पॉप-अप से दर्ज करते हैं, लेकिन मुझे नहीं पता कि क्या वे XHRRequest का उपयोग करते समय संग्रहीत करते हैं यदि वे करते हैं, तो क्या ब्राउज़र में बहुत स्थिरता है?

इसके अलावा, उपयोगकर्ता को भी आवेदन की "साइन आउट" करने में सक्षम होना चाहिए, भी। यदि ब्राउज़र प्रमाणीकरण क्रेडेंशियल्स को संग्रहीत करता है, तो जावास्क्रिप्ट का उपयोग करके उन्हें साफ़ करने का एक तरीका है।

मुझे लगता है कि मैं इस व्यक्ति को हल करने की कोशिश करने वाला पहला व्यक्ति नहीं बन सकता। वहाँ कुछ jQuery प्लगइन या कुछ है जो पहले से ही इस संभालती है? या क्या ऐसा करना संभव नहीं है जो मैं करने की कोशिश कर रहा हूं?


ठीक है, मैं मदद करने पर एक चाकू ले लूँगा ...

सबसे पहले, समझें कि HTTP प्रमाणीकरण कैसे काम करता है। दो संस्करण हैं - बेसिक और डाइजेस्ट सादा पाठ में मूल संचार, डाइजेस्ट एन्क्रिप्ट किया गया है। इन प्रकार के प्रमाणीकरण के साथ, उपयोगकर्ता नाम / पासवर्ड हर एक अनुरोध के साथ HTTP शीर्षलेख में पारित किया गया है। ब्राउजर इन लॉगिनों पर कब्जा करता है और इन्हें एक दुर्गम ब्राउज़र सत्र कुकी में संग्रहीत किया जाता है जो ब्राउजर सत्र बंद होने पर हटा दिया जाता है। इसलिए, आपके एक प्रश्न के उत्तर में, आप इन जावास्क्रिप्ट से नहीं पहुंच सकते

आप उपयोगकर्ता नाम और पासवर्ड के लिए अपना स्वयं का सत्र कुकी चर बना सकते हैं। इस के लिए jQuery के कार्यों वास्तव में सरल हैं सत्र कुकीज़ सेट करने के एक उदाहरण के रूप में jquery-cookie मॉड्यूल देखें। इन सत्र कुकी से पुनर्प्राप्त किया जा सकता है और सर्वर में प्रत्येक एजेक्स अनुरोध के साथ भेजा गया। हालांकि, यह नेटवर्क के सूँघने के बाद प्रमाणीकरण करने का एक अच्छा अच्छा तरीका नहीं है, जिससे किसी को आसानी से अपने लेख विवरणों को आसानी से प्राप्त कर सकें। लेकिन, यह काम करेगा

सत्र कुकी आधारित प्रमाणीकरण का उपयोग करना जहां प्रत्येक अनुरोध के साथ सत्र आईडी भेजा जाता है, ऐसा करने का सबसे अच्छा तरीका है। सर्वर साइड पर, आपको हर एचटीटीपी अनुरोध के लिए फ़ंक्शन बुलाए जाने की ज़रूरत है। इस फ़ंक्शन को निम्न कार्य करना चाहिए:

   check to see if the session has been authenticated
   if no:
       redirect to login screen
   if yes:
       do authorization and allow the user access to the page

अधिकांश वेब फ़्रेमवर्क सर्वर पर सत्र कुकी प्रमाणीकरण और सत्र आईडी के प्रबंधन का समर्थन करते हैं। यह निश्चित रूप से जाने का रास्ता है


यह दिलचस्प है एक

कुकीज़ का उपयोग करके सर्वर पर उपयोगकर्ता सत्र प्रबंधित करें एक सत्र बनाएँ जब उपयोगकर्ता पहले प्रवेश पृष्ठ तक पहुंच जाएगा और सत्र आईडी / कुंजी को प्रतिसाद के माध्यम से कुकी में से एक के रूप में देगा। जब उपयोगकर्ता को प्रमाणित किया जाता है तो कुकी में उपयोगकर्ता "कुंजी" जानकारी और सर्वर पर एप्लिकेशन संदर्भ में "मान" डालते हैं उपयोगकर्ता लॉगिन होने के बाद, किसी भी बाद के अनुरोध को सर्वर पर सत्र कुकी मान के आधार पर प्रमाणित किया जाएगा। प्रयोक्ता "कुंजी" कुकी मूल्य के रूप में पारित होने के आधार पर प्राधिकरण किया जाएगा।

लॉगआउट पर सर्वर से सत्र आधारित कुकीज़ साफ़ करें और साइट को डिफ़ॉल्ट पृष्ठ पर रीफ्रेश करें।

कुकीज़ विभिन्न ब्राउज़रों के साथ विचित्र हैं - बस एक नोट;)

उम्मीद है की यह मदद करेगा।


अद्यतन करें

नीचे दिए गए जवाब 2012 में पोस्ट किए गए थे और लिंक्स ज्यादातर मर चुके हैं। हालांकि, तब से, एक समान समाधान के लिए एक और अधिक सुरुचिपूर्ण मानक-आधारित दृष्टिकोण JSON Web Tokens का उपयोग करते हुए दिखाई दिया। ये एक अच्छा ब्लॉग पोस्ट है जिसका इस्तेमाल करना समझा जाता है।

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

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

एक्सएचआर / एजेएक्स भाग एक लाल हेरिंग है। यह काम करेगा कि क्या आप XHR अनुरोध कर रहे हैं या पुराने फ़ैशन वाला पेज-बाय-पेज वेब एप्लिकेशन। मुख्य बिंदु हैं:

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




stateless-session