2011-11-10 10 views
23

मेरे पास एकाधिक सबडोमेन (example.com, blog.example.com, और app.example.com) में एक सामान्य प्रमाणीकरण फ़ॉर्म है। लॉगिन प्रपत्र जहां यह दिखाया गया है पर ध्यान दिए बिना example.com के लिए इस डेटा प्रस्तुत करना होगा, तो मैं CORS का उपयोग कर के बारे में सोचा है, लेकिन इस:क्र्रेडेंशियल के साथ क्रॉस ओरिजिनल रिसोर्स शेयरिंग

header("Access-Control-Allow-Origin: http://example.com http://blog.example.com http://app.example.com") 

does not work

तो मैं अगली बात कर के बारे में सोचा है, और सर्वर साइड पर मैन्युअल रूप से उत्पत्ति हैडर जाँच, और कहा कि अनुरोध किया जा सकता है तो एक Access-Control-Allow-Origin: * अनुमति देता है, लेकिन दुर्भाग्य से, इस in the MDN

महत्वपूर्ण नोट अप फसलों: एक credentialed अनुरोध का उत्तर देते समय, सर्वर डोमेन निर्दिष्ट करना होगा, एक जंगली कार्डिंग का उपयोग नहीं कर सकते हैं।

क्या मेरे अनुरोध को एकाधिक डोमेन पर काम करने का कोई तरीका है, और फिर भी सीओआरएस का उपयोग करके प्रमाण पत्र भेजते हैं?

+0

मेरा मानना ​​है कि आप भी डोमेन नाम के बीच अल्पविराम डाल सकते हैं। (यानी, हाँ, आप इसे एकाधिक डोमेन पर काम कर सकते हैं।) – BrainSlugs83

+1

मुझे ऐसा नहीं लगता है। Spec से: > प्रैक्टिस में मूल-सूची-या-शून्य उत्पादन अधिक बाध्य है। उत्पत्ति की एक स्पेस से अलग सूची की अनुमति देने के बजाय, यह या तो एक मूल या स्ट्रिंग "शून्य" है। [स्रोत] (https://www.w3.org/TR/cors/#access-control-allow-origin-response-header) – Nemo

उत्तर

34

दो विचार:

1) आप भी शामिल कर रहे हैं "पहुंच-नियंत्रण-अनुमति दें-क्रेडेंशियल: सच" शीर्षक? कुकी क्रेडेंशियल्स को पास करने के लिए इसकी आवश्यकता है (और संबंधित एक्सएचआर क्लाइंट को सेट करना होगा .withCredentials = true)

2) क्या आपने अपने लिंक से सुझाव की कोशिश की है और केवल वर्तमान अनुरोध के लिए मूल शामिल है। उदाहरण के लिए, यदि हेडर "उत्पत्ति: http://blog.example.com" के साथ कोई अनुरोध आता है, तो आप "एक्सेस-कंट्रोल-अनुमति-उत्पत्ति: http://blog.example.com" के साथ जवाब देंगे, और उत्पत्ति की सूची नहीं। इसके लिए आपके सर्वर साइड कार्यान्वयन पर थोड़ा और काम की आवश्यकता है।

3) एक अन्य विचार, आप उल्लेख करते हैं कि आपके पास एक ही लॉगिन फॉर्म है जिसे विभिन्न डोमेन द्वारा साझा किया जाना चाहिए। खैर, यदि यह एक मानक HTML फॉर्म है, तो आप डोमेन पर एक नियमित फॉर्म-पोस्ट कर सकते हैं। आपको सीओआरएस का उपयोग करने की आवश्यकता नहीं है। बस उस फ़ॉर्म की "कार्रवाई" प्रॉपर्टी को उस यूआरएल पर सेट करें जिसे आप पोस्ट करना चाहते हैं। उदाहरण के लिए:

<form name="login" action="http://login.example.com/doLogin"> 
+0

मैं (2) का उपयोग कर समाप्त हुआ। किसी भी तरह मैंने एकल मूल विधि को अनदेखा कर दिया था। – Nemo

1
// cross domain 
header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']); 
header('Access-Control-Allow-Credentials: true'); 
+6

मूल हेडर के सख्त सत्यापन के बिना ऐसा न करें या आप सुरक्षा छेद खोलेंगे – Tom

+3

यह उत्तर दिखाता है कि मूर्खतापूर्ण सुरक्षा क्यों असंभव है - टेक्निकलर में भी !! >< – BrainSlugs83

+0

ठीक प्रतीत होता है कि यह "संक्षेप में" जैसा ही है "*" जैसा कि सूक्ष्म सुरक्षा छेद खोल सकता है, इसलिए निराश हो गया है, http://stackoverflow.com/questions/12001269/what-are-the- सुरक्षा-जोखिम-की-सेटिंग-पहुंच-नियंत्रण-अनुमति-मूल – rogerdpack

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