2012-04-06 6 views
5

ठीक है, ऐसा लगता है कि मैंने अपने प्रारंभिक प्रश्न के साथ गलती की है। तो, यहां कुछ सुधार हैं। उत्तर अभी भी लागू होता है, क्योंकि एचटीटीपीएस (एसएसएल) में प्रोटोकॉल में बदलाव होने पर दूसरा रीडायरेक्ट रोक दिया जाता है।ब्राउज़र AJAX प्रतिक्रिया से रीडायरेक्ट का पालन नहीं करता है (PHP- जेनरेट प्रतिक्रिया प्रतिक्रिया सीएएस प्रमाणीकरण का उपयोग कर रही है)

मेरे मामले में, मेरे पास कई बार एक रीडायरेक्ट होता है, और ब्राउज़र दूसरे रीडायरेक्ट का पालन नहीं करता है। पहला रीडायरेक्ट का पालन किया जाता है लेकिन एक त्रुटि देता है।

मैं पढ़ता रहता हूं कि रीडायरेक्ट वाले जावास्क्रिप्ट AJAX प्रतिक्रियाओं का स्वचालित रूप से पालन किया जाता है, लेकिन यह मेरे मामले में नहीं दिखता है। पहला रीडायरेक्ट स्वचालित रूप से ब्राउज़र द्वारा पीछा किया जाता है, और पहला रीडायरेक्ट हेडर में दूसरे रीडायरेक्ट का पालन किये बिना वापस किया जाता है। मेरी समस्या यह है कि मैं चाहता हूं कि सभी रीडायरेक्ट स्वचालित रूप से ब्राउज़र द्वारा पीछा किए जाएं।

रीडायरेक्ट phpCAS लाइब्रेरी का हिस्सा हैं। मेरे पास PHP में लिखा गया एक एपीआई है जो परिणाम लौटने से पहले प्रत्येक बार उपयोगकर्ता प्रमाणीकरण की जांच करता है।

यहां अनुक्रम है। ध्यान देने योग्य मुख्य बात यह है कि 1 रीडायरेक्ट के बाद ब्राउजर दूसरी प्रतिक्रिया देता है। मैं इसे सभी तरह से पसंद करता हूं और आखिरी प्रतिक्रिया देता हूं जब मैं localhost/example/api पर AJAX कॉल करता हूं।

स्थानीय होस्ट/उदाहरण

  • कॉल localhost/example/api jQuery.ajax का उपयोग कर()

रिस्पांस 1: स्थानीय होस्ट/उदाहरण/api

  • https://localhost/accounts/cas/login?service=api.example.com&gateway=true को पुनर्निर्देश (का उपयोग करते हुए एसएसएल)।

रिस्पांस 2: (एसएसएल) स्थानीय होस्ट/लेखा/सीएएस/के लिए लॉग इन सेवा = api.example.com & प्रवेश द्वार = सच

  • जब क्वेरी कुंजी 'गेटवे' मौजूद है, लॉगिन केवल 'सेवा' कुंजी द्वारा टिकट के बिना या बिना सेवा के यूआरएल पर रीडायरेक्ट करता है (उस सेवा को सिग्नल करने के लिए जिसे उपयोगकर्ता लॉग इन किया गया है या नहीं)।

रिस्पांस 3: स्थानीय होस्ट/api टिकट = TICKET

  • टिकट सत्यापन होता है और बिना टिकट स्वंय पुनर्निर्देश।

रिस्पांस 4: स्थानीय होस्ट/api

  • इस बार कैस ग्राहक $ _SESSION पर लग रहा है क्या का टिकट था, याद करने के लिए, और फिर JSONP लौटने एपीआई अनुरोध संसाधित करता है।

कोई विशेष कारण नहीं है कि मैं ओपनआईडी या ओपनएथ (ऑरियेशन) पर सीएएस का उपयोग कर रहा हूं।सीएएस केवल पहला प्रमाणीकरण मॉड्यूल था जिसे मैं वर्डप्रेस में काम करने में सक्षम था। मैं एक अलग प्रमाणीकरण पुस्तकालय, सीएमएस, ढांचे, आदि का उपयोग करने के मामले में सुझावों के लिए खुला हूं। हालांकि, मेरी आशा है कि यह परियोजना पूरी हो जाए। तो कम पुन: टूलिंग बेहतर है।

+0

आपको क्या पता है, मैंने थोड़ी देर के लिए स्टैक ओवरव्लो पर खोज के बाद यह प्रश्न पोस्ट किया था। फिर, प्रश्न पोस्ट करने के बाद मैं एक और खोज करता हूं और स्टैक ओवरफ्लो पर एक समान प्रश्न ढूंढता हूं। http://stackoverflow.com/questions/2961051/cas-authentication-and-redirects-with-jquery-ajax –

+0

ऐसा लगता है क्योंकि दूसरे की प्रतिक्रिया अलग प्रोटोकॉल (एसएसएल) उपयोग कर रहा है लग रहा है, और उप डोमेन अलग है, तो है कि त्रुटि के लिए जिम्मेदार होगा। मुझे लगता है कि इसका मतलब यह होगा कि ब्राउजर रीडायरेक्ट का पालन कर रहा है, सिर्फ कुछ नहीं जब (कुछ प्रोटोटाइप? या सबोडमेन? या दोनों?), और प्रतिक्रिया में डेटा वापस नहीं किया जाता है (अन्यथा, शायद उस बिंदु पर एक JSONP प्रतिक्रिया जोड़ा जा सकता है। .. मुझे यह कोशिश करनी होगी ... श्वास।) –

उत्तर

6

आप बाद में अपने आप को पाया के रूप में के रूप में आप अपनी टिप्पणी में कहा, ajax अनुरोध same origin policy के अधीन हैं।

हां, आप JSONP का उपयोग कर सकते हैं - हालांकि, यदि आप केवल आईई 8 और ऊपर की ओर समर्थन करने के लिए भाग्यशाली हैं, CORS एक बेहतर समाधान हो सकता है।

असल में, जोड़ने हेडर ऐसे

access-control-allow-origin: http://api.example.com 
access-control-allow-credentials: true 

अपने सर्वर जवाब देने के लिए के रूप में, आप क्रॉस मूल नीति के आसपास काम कर सकता था।

इसके अलावा इस jQuery ticket यह थोड़े jQuery के साथ काम करने के लिए देखते हैं।

+0

ओह शांत, मैं ऐसा कर सकता था क्योंकि मेरे पास सभी सबडोमेन तक पहुंच है। क्या यह सभी ब्राउज़रों के लिए काम करेगा? –

+0

@BiagioArobba काफी नहीं, IE8 +, ओपेरा 12+, देखें: http://caniuse.com/#search=cors – Razor

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