2009-10-26 17 views
6

मेरे उपयोगकर्ता किसी तृतीय पक्ष सेवा के लिए उपयोगकर्ता नाम और पासवर्ड दर्ज करते हैं। मैं उन्हें प्रमाणित करने के लिए उस सेवा के लिए AJAX कॉल करता हूं। मुद्दा यह है कि यदि वे गलत उपयोगकर्ता नाम और पासवर्ड दर्ज करते हैं तो ब्राउज़र (कम से कम फ़ायरफ़ॉक्स) "प्रमाणीकरण आवश्यक" संवाद प्रदर्शित करेगा। यदि वे उस संवाद में सही उपयोगकर्ता नाम और पासवर्ड दर्ज करते हैं, तो मेरा AJAX कॉल "सफलता" वापस कर देगा, और ऐसा प्रतीत होता है कि उनके द्वारा दर्ज मूल उपयोगकर्ता/पास सही था, जब यह नहीं था (क्योंकि उन्होंने इसे बदल दिया था)।एजेक्स कॉल करने के दौरान ब्राउज़र के "प्रमाणीकरण आवश्यक" संवाद को दबाने के लिए कैसे प्रमाणीकरण की आवश्यकता है?

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

jQuery.ajax({ 
    type: "GET", 
    dataType: "xml", 
    url: endpoint, 
    username: username, 
    password: password, 
    success: function(data,status) { 
    // Do something 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
    alert(errorThrown); 
    } 
}); 

उत्तर

1

मैंने ब्राउज़र और सेवा के बीच प्रॉक्सी डालने के द्वारा इस समस्या को हल किया है जिसके लिए प्रमाणीकरण की आवश्यकता है, मेरे मामले में, जावा सर्वलेट। ब्राउजर AJAX अनुरोध को सर्वलेट को भेजता है, जो सेवा के लिए अनुरोध को आगे भेजता है, फिर "डब्ल्यूडब्ल्यूडब्लू-प्रमाणीकरण" हेडर को छोड़कर सेवाओं की प्रतिक्रिया वापस भेजता है। आपका ब्राउज़र ऐप तदनुसार HTTP 200 या 401 प्रतिक्रिया कोड को संभालता है।

इसी तरह, प्रॉक्सी हमेशा एक 200 प्रतिक्रिया देता है जो अग्रेषित अनुरोध के परिणामों को इंगित करता है। इस तरह आप अपनी प्रॉक्सी की विफलता और सेवा की प्रतिक्रिया के बीच अंतर को समझ सकते हैं।

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

  1. आपकी प्रॉक्सी कुकी, आपका ब्राउज़र ऐप याद रखेगी। हमेशा इस सेवा के लिए प्रॉक्सी से गुजरता है, और प्रॉक्सी इस कुकी को बाद के अग्रेषित अनुरोधों में जोड़ता है। या
  2. आप सेवा की कुकी को अनदेखा करते हैं, और प्रॉक्सी के माध्यम से उपयोगकर्ता नाम और पासवर्ड सत्यापित करने के बाद ब्राउजर सेवा के साथ सीधे प्रमाणीकृत कर लेता है। हालांकि इस सेवा के साथ एक अनाथ सत्र बनाने के पक्ष प्रभाव हो सकता है
1
यूआरएल स्ट्रिंग " http://blah.com" होने के बावजूद

, यह "http://user:[email protected]"

// Note that you might need to trim http:// out of endpoint first 
url: 'http://' + username + ':' + password + '@' + endpoint, 
+0

क्या वास्तव में समस्या को हल करेगा? मैं उम्मीद करता हूं कि यदि यूआरएल में निर्दिष्ट उपयोगकर्ता नाम और पासवर्ड गलत थे, तो दूरस्थ सर्वर अभी भी 401 प्रतिक्रिया जारी करेगा ... –

-1

आप इसे आईई या फ़ायरफ़ॉक्स में ऐसा नहीं कर सकते हैं, और आप कभी नहीं के लिए जावास्क्रिप्ट से कर सकेंगे सुरक्षा को ध्यान में रखते हुए। कोई ब्राउज़र सेटिंग नहीं है जो उपयोगकर्ता को http प्रमाणीकरण के लिए संकेत मिलने से बचने देती है। यह वास्तविक परेशान हो जाता है जब आपके पास 50 छवियां होती हैं जो सभी को http प्रमाणीकरण की आवश्यकता होती है।

+0

सत्य नहीं है: https: //developer.mozilla।संगठन/एन/एक्सएमएलएचटीपीआरक्वेट # खुला% 28% 2 9 – Marius

0

jQuery के बिना (IE में काम नहीं करता है, लेकिन यह एक फ़ायरफ़ॉक्स एक्सटेंशन के लिए ठीक है):

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "http://example.com", true, "username", "password"); 
xhr.onreadystatechange = function(){ 
    if(this.readyState == 4){ 
    if(this.status == 200){ 
     alert("we got a response"); 
    } 
    } 
} 
xhr.send(); 
0

कैसे के बारे में HTTP प्रमाणीकरण का उपयोग नहीं कर रहा है? कुकीज़ के साथ एक मानक लॉगिन का उपयोग करें, या उपयोगकर्ता को स्क्रिप्ट पर उपयोगकर्ता नाम/पासवर्ड पोस्ट करें और उपयोगकर्ताओं के डेटाबेस के खिलाफ विवरण जांचें।

+0

उन्होंने कहा कि यह किसी तीसरे पक्ष के उत्पाद का कारण है। – jantimon

संबंधित मुद्दे