2016-04-26 7 views
6

में एक्सेस-कंट्रोल-अनुमति-प्रमाण-पत्र शीर्षलेख सक्षम करें हमने हाल ही में Azure क्लाउड सर्विसेज से Azure वेबसाइटों पर एक एपीआई एप्लिकेशन माइग्रेट किया है, और कुछ क्लाइंट अभी भी प्रमाणीकरण के लिए हमारे विरासत प्रोटोकॉल का उपयोग कर रहे हैं, जो कुकीज़ का उपयोग करता है (सामान्य Authorization: Bearer HTTP शीर्षलेख के बजाय)। हमें थोड़ी देर के लिए इस प्रमाणीकरण प्रोटोकॉल का समर्थन करने की आवश्यकता है क्योंकि ग्राहक तुरंत माइग्रेट नहीं कर पाएंगे।Azure वेबसाइट (Azure App Services)

एक क्रॉस मूल ajax एपीआई के लिए निर्देशित अनुरोध में कुकी का समर्थन करने के लिए, ग्राहक XMLHttpRequest में true को withCredentials सेटिंग सेट की जरूरत है, और सर्वर Access-Control-Allow-Credentials हेडर के रूप में अच्छी तरह से करने के लिए किसी भी अनुरोध के साथ CORS repond की जरूरत है।

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

क्या इस शीर्षक को प्रतिक्रिया में अस्थायी रूप से जोड़ने का कोई तरीका है?

उत्तर

11

हम अंत में Azure Apps का CORS मिडलवेयर के व्यवहार को समझने में कामयाब रहे। इसे अक्षम करने के लिए, आपको अपने वेब ऐप के CORS ब्लेड में प्रत्येक एकल अनुमत मूल प्रविष्टि को साफ़ करना होगा (* सहित)। फिर आप वेब एपीआई 2 कार्यक्षमता या web.config का उपयोग करके स्वयं को CORS प्रबंधित कर सकते हैं।

जानकारी the documentation में भी उपलब्ध है:

एक एपीआई ऐप्लिकेशन, दोनों वेब एपीआई CORS और अनुप्रयोग सेवा CORS उपयोग करने का प्रयास न करें। ऐप सेवा सीओआरएस को प्राथमिकता दी जाएगी और वेब एपीआई सीओआरएस का कोई असर नहीं होगा। उदाहरण के लिए, यदि आप ऐप सेवा में एक मूल डोमेन सक्षम करते हैं, और अपने वेब एपीआई कोड में सभी मूल डोमेन सक्षम करते हैं, तो आपका एज़ूर एपीआई ऐप केवल Azure में निर्दिष्ट डोमेन से कॉल स्वीकार करेगा।

तो अंतिम उत्तर यह है: यदि आपके आवेदन को एक बहुत ही विशिष्ट कॉरस प्रबंधन की आवश्यकता नहीं है, तो आप Azure App Service CORS का उपयोग कर सकते हैं। अन्यथा आपको इसे स्वयं को संभालने और वेब ऐप में सभी कॉरस कॉन्फ़िगरेशन को अक्षम करने की आवश्यकता होगी।

+0

धन्यवाद! मुझे Azure पर होस्ट किए गए servicestack ऐप में CORS का उपयोग करके बहुत परेशानी हो रही है। यह Azure पोर्टल से सीओआरएस कॉन्फ़िगरेशन को सबकुछ ठीक कर देता है। –

+0

अजीब, यह Azure cors को अक्षम करने के लिए एक टॉगल होना चाहिए, बस सभी साइटों को हटाने से यह अक्षम हो जाता है और आपके ऐप से गुजरता है। यदि कोई उत्पत्ति सूचीबद्ध है, तो ऐसा लगता है कि आपके पास किसी अन्य कोरस हेडर को हटा दिया गया है (withcredenetials, विधियां, आदि)।मुझे लगता है कि किसी प्रकार की स्पष्टीकरण जो किसी साइट में प्रवेश करती है, उसे सक्षम करेगी और उन अन्य शीर्षकों के लिए इसका क्या मूल्य उपयोग किया जाना चाहिए। मुझे लगता है कि इसे अपने हेडर को स्वचालित रूप से हटाने के लिए किसी प्रकार की त्रुटि या चेतावनी देना चाहिए ... –

1

यह कुछ ऐसा है जो आप अपने वेब ऐप में उपलब्ध web.config फ़ाइल में कर सकते हैं।

आप विजुअल स्टूडियो ऑनलाइन (मोनाको) का उपयोग कर इसे संपादित कर सकते हैं जो एक उपकरण है जिसे आप Azure पोर्टल से जोड़ते हैं।

यहां अधिक पढ़ें: http://enable-cors.org/server_iis7.html

+0

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

+0

यही मैंने सोचा था, क्लाइंट और हमारे एप्लिकेशन सर्वर के बीच एक एज़ूर वेबसाइट मिडलवेयर है जो सर्वर द्वारा सेट किए गए सभी कोर-संबंधित शीर्षकों को छोड़ देता है और उन्हें स्वयं से बदल देता है, इसलिए एक कस्टम 'एक्सेस-कंट्रोल-स्वीकृति- Web.config फ़ाइल में प्रमाण-पत्र शीर्षलेख का कोई प्रभाव नहीं पड़ता है। कोई अन्य कस्टम हेडर ठीक से जोड़ा गया है, लेकिन सीओआरएस हेडर नहीं हैं। –