2017-03-15 15 views
10

हां, मुझे पता है कि आप क्या सोच रहे हैं - अभी तक एक और सीओआरएस सवाल है, लेकिन इस बार मैं स्टंप हो गया हूं।सीओआरएस: क्रेडेंशियल मोड 'शामिल'

तो शुरू करने के लिए, वास्तविक त्रुटि संदेश:

XMLHttpRequest cannot load http://localhost/Foo.API/token . The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin ' http://localhost:5000 ' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

मुझे यकीन है कि नहीं कर रहा हूँ क्या साख मोड का क्या मतलब है 'शामिल' है?

तो जब मैं डाकिया में अनुरोध करते हैं, मैं का अनुभव नहीं ऐसी त्रुटि:

enter image description here

लेकिन जब मैं अपने AngularJS वेब एप्लिकेशन के माध्यम से एक ही अनुरोध का उपयोग, मैं इस त्रुटि से स्टम्प्ड रहा हूँ। यहां मेरे angualrjs अनुरोध/प्रतिक्रिया है। जैसा कि आप प्रतिक्रिया OK 200 है देखेंगे, लेकिन मैं अभी भी CORS त्रुटि प्राप्त:

फ़िडलर अनुरोध और प्रतिक्रिया:

निम्न छवि एपीआई

करने के लिए अनुरोध और वेब सामने के अंत से प्रतिक्रिया दर्शाता है

Fiddler

तो अन्य सभी पदों मैं ऑनलाइन पढ़ा है पर आधारित है, यह लगता है जैसे मैं सही काम कर रहा हूँ, इसलिए मैं त्रुटि नहीं समझ सकता है।

विधि 1 का इस्तेमाल किया:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     EnableCrossSiteRequests(config); 
    } 

    private static void EnableCrossSiteRequests(HttpConfiguration config) 
    { 
     var cors = new EnableCorsAttribute("*", "*", "*") 
     { 
      SupportsCredentials = true 
     }; 
     config.EnableCors(cors); 
    } 
} 

विधि 2 का इस्तेमाल किया - संदर्भ उद्देश्यों के

enter image description here

एपीआई में CORS कार्यान्वयन: अंत में, यहाँ कोड मैं angualrjs भीतर का उपयोग (प्रवेश कारखाना) है :

 public void Configuration(IAppBuilder app) 
     { 
      HttpConfiguration config = new HttpConfiguration(); 

      ConfigureOAuth(app); 

      WebApiConfig.Register(config); 
      app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
      app.UseWebApi(config); 

     } 

अग्रिम में बहुत धन्यवाद!

+0

अच्छा चित्र शामिल कर रहे हैं के साथ CORS अनुरोध का जवाब, क्या वे के हैं कर सकते हैं? अपने प्रश्न का उत्तर देने के लिए, यदि आप प्रमाणीकरण शामिल करते हैं, तो एक्सेस-कंट्रोल-अनुमति-मूल प्रतिक्रिया ** ** मूल (ब्राउज़र पृष्ठ) होस्ट होना चाहिए, यह ** ** '' 'नहीं हो सकता है - इसलिए, सर्वर पक्ष सीओआरएस गलत कर रहा है - ओह, और पोस्टमैन काम करता है क्योंकि यह क्रॉस मूल अनुरोध –

+0

@JaromandaX नहीं है, प्रतिक्रिया के लिए धन्यवाद। चित्र अनुरोध/प्रतिक्रिया के साथ-साथ शीर्षकों को पारित करने का प्रदर्शन करते हैं। आप सवाल पूछ रहे हैं, जाहिर है कि उसने अपना लक्ष्य नहीं किया ... –

+0

मेरी टिप्पणी आपको केवल इतना जानना चाहिए - चित्रों को देखने की आवश्यकता नहीं है –

उत्तर

9

मुद्दा अपने कोणीय कोड की वजह से उपजी:

withCredentials सही पर सेट किया जाता है, तो यह अनुरोध के साथ साख या कुकीज़ भेजने की कोशिश कर रहा है। इसका मतलब है कि एक और मूल संभावित रूप से प्रमाणीकृत अनुरोध करने का प्रयास कर रहा है, वाइल्डकार्ड ("*") को "एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन" हेडर के रूप में अनुमति नहीं है।

आपको इस काम को करने के लिए "एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन" हेडर में अनुरोध करने वाले मूल के साथ स्पष्ट रूप से जवाब देना होगा।

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

मैं इस सामग्री को this article में समझाता हूं मैंने कुछ समय पहले लिखा था।

तो आप या तो गलत पर withCredentials सेट या एक मूल श्वेत सूची को लागू करने और एक वैध मूल जब भी साख

+1

आपके लेख के लिए धन्यवाद, यह बहुत उपयोगी है! –

+1

आपका लेख सुपर है !!! – ArmeniaH

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