हाँ, मुझे पता है कि आप क्या सोच रहे हैं - एक और CORS प्रश्न, लेकिन इस बार मैं स्तब्ध हूँ।

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

XMLHttpRequest http://localhost/Foo.API/token लोड नहीं कर सकता। प्रतिक्रिया में 'पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति' शीर्षलेख का मान होना चाहिए जब अनुरोध का क्रेडेंशियल मोड है . तो वाइल्डकार्ड '*' न बनें 'शामिल करें'. उत्पत्ति 'http://localhost:5000' इसलिए अनुमति नहीं है पहुंच। द्वारा शुरू किए गए अनुरोधों का क्रेडेंशियल मोड XMLHttpRequest को withCredentials विशेषता द्वारा नियंत्रित किया जाता है।

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

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

enter image description here

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

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

निम्न छवि वेब फ्रंट-एंड से एपीआई के लिए अनुरोध और प्रतिक्रिया प्रदर्शित करती है

Fiddler

इसलिए अन्य सभी पोस्टों के आधार पर जो मैंने ऑनलाइन पढ़ी हैं, यह लगता है जैसे मैं सही काम कर रहा हूं, इसलिए मैं त्रुटि को नहीं समझ सकता। अंत में, यहाँ वह कोड है जिसका उपयोग मैं angualrjs (लॉगिन फ़ैक्टरी) के भीतर करता हूँ:

enter image description here

एपीआई में सीओआरएस कार्यान्वयन - संदर्भ उद्देश्य:

विधि 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 का इस्तेमाल किया:

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

    ConfigureOAuth(app);

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

}

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

124
Richard Bailey 15 मार्च 2017, 10:23
अच्छी तस्वीरें, वे किसकी हैं? अपने प्रश्न का उत्तर देने के लिए, यदि आप प्रमाणीकरण शामिल करते हैं, तो एक्सेस-कंट्रोल-अनुमति-मूल प्रतिक्रिया होना चाहिए मूल (ब्राउज़र पृष्ठ) होस्ट होना चाहिए, यह नहीं हो सकता है * - तो, ​​सर्वर पक्ष CORS गलत कर रहा है - ओह, और डाकिया काम करता है क्योंकि यह एक क्रॉस मूल अनुरोध नहीं है
 – 
Jaromanda X
15 मार्च 2017, 10:29
@JaromandaX, प्रतिक्रिया के लिए धन्यवाद। चित्र अनुरोध/प्रतिक्रिया प्रदर्शित करते हैं और साथ ही शीर्षलेख पारित किए जा रहे हैं। आप सवाल पूछ रहे हैं, जाहिर है कि यह अपने लक्ष्य को पूरा नहीं करता है ...
 – 
Richard Bailey
15 मार्च 2017, 10:34
मेरी टिप्पणी वह होनी चाहिए जो आपको जानने की जरूरत है - तस्वीरें देखने की जरूरत नहीं है
 – 
Jaromanda X
15 मार्च 2017, 10:37
तो हाल ही में मैंने अपने वेब एपीआई पर कुकीज़ से दूर जाने और टोकन का उपयोग करने का फैसला किया। जब मैंने कुकीज़ का उपयोग किया, तो मेरा CORS बिना किसी समस्या के काम करता है। इसलिए मैं यह समझने के लिए संघर्ष कर रहा हूं कि सर्वर साइड पर CORS को सही तरीके से कैसे लागू नहीं किया जाता है
 – 
Richard Bailey
15 मार्च 2017, 10:41
1
यदि आप प्रमाणीकरण शामिल करते हैं, तो access-control-allow-origin प्रतिसाद मूल (ब्राउज़र पृष्ठ) होस्ट होना चाहिए, यह * नहीं हो सकता है
 – 
Jaromanda X
15 मार्च 2017, 10:52

6 जवाब

सबसे बढ़िया उत्तर

समस्या आपके कोणीय कोड से उपजी है:

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

आपको उस मूल के साथ स्पष्ट रूप से जवाब देना होगा जिसने इस काम को करने के लिए "पहुंच-नियंत्रण-अनुमति-उत्पत्ति" शीर्षलेख में अनुरोध किया था।

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

मैं इस सामग्री को इस लेख में समझाता हूं। पीछे।

तो आप या तो withCredentials को गलत पर सेट कर सकते हैं या एक मूल श्वेतसूची को लागू कर सकते हैं और जब भी क्रेडेंशियल्स शामिल होते हैं तो वैध मूल के साथ CORS अनुरोधों का जवाब दे सकते हैं

133
max23_ 29 नवम्बर 2018, 19:47
6
मैं टाइपस्क्रिप्ट के साथ एंगुलर 5 एप्लिकेशन पर काम कर रहा हूं। मुझे प्रमाण-पत्रों को सत्य के रूप में देना होगा अन्यथा मुझे प्राधिकरण विफल अपवाद मिलेगा। इसे क्रेडेंशियल्स के साथ कैसे हल करें: सच
 – 
Ziggler
8 मई 2018, 01:18
मेरी भी यही स्थिति थी। क्या आप समाधान ढूंढ रहे हैं?
 – 
Pavel
9 मई 2018, 02:00
मैंने समाधान पर जुर्माना लगाया मेरा उत्तर देखें।
 – 
Pavel
10 मई 2018, 23:41
2
मुझे अभी भी यह त्रुटि मिल रही है जब विथक्रेडेंशियल्स = TRUE और एक्सेस-कंट्रोल-अनुमति-उत्पत्ति = ['localhost:4200']< /a>, और मैं स्टार * का उपयोग नहीं कर रहा हूं, इसलिए त्रुटि संदेश का कोई मतलब नहीं है। त्रुटि संदेश: "प्रीफ्लाइट अनुरोध का जवाब एक्सेस कंट्रोल चेक पास नहीं करता है: प्रतिक्रिया में 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर का मान वाइल्डकार्ड नहीं होना चाहिए * जब अनुरोध का क्रेडेंशियल मोड 'शामिल' हो। उत्पत्ति। इसलिए 'लोकलहोस्ट:4200' को एक्सेस की अनुमति नहीं है। XMLHttpRequest द्वारा शुरू किए गए अनुरोधों के क्रेडेंशियल मोड को withCredentials विशेषता द्वारा नियंत्रित किया जाता है। ।"
 – 
mruanova
9 जुलाई 2018, 23:36
क्या आप सुनिश्चित हैं कि अनुरोध में एक्सेस-कंट्रोल-अनुमति-उत्पत्ति शीर्षलेख सही ढंग से सेट है? ऐसा लगता है कि वाइल्डकार्ड के साथ कहीं कुछ भेजा जाता है
 – 
geekonaut
10 जुलाई 2018, 08:11

क्लाइंट साइड में ({credentials: true}) के बजाय बस Axios.defaults.withCredentials=true जोड़ें, और app.use(cors()) को में बदलें

app.use(cors(
  {origin: ['your client side server'],
  methods: ['GET', 'POST'],
  credentials:true,
}
))
-1
Dev Essence 17 नवम्बर 2020, 13:08

यदि आप CORS मिडलवेयर का उपयोग कर रहे हैं और आप withCredentials बूलियन ट्रू भेजना चाहते हैं, तो आप CORS को इस तरह कॉन्फ़िगर कर सकते हैं:

var cors = require('cors');    
app.use(cors({credentials: true, origin: 'http://localhost:5000'}));

`

25
Ankur Kedia 29 अप्रैल 2020, 15:35

कोणीय 5 और स्प्रिंग सुरक्षा के लिए अनुकूलित CORS (कुकी आधार समाधान)

कुकी परिवहन के लिए कोणीय पक्ष पर विकल्प ध्वज withCredentials: true जोड़ने की आवश्यकता है:

constructor(public http: HttpClient) {
}

public get(url: string = ''): Observable<any> {
    return this.http.get(url, { withCredentials: true });
}

जावा सर्वर-साइड पर कॉन्फ़िगरेशन CORS नीति के लिए CorsConfigurationSource जोड़ने की आवश्यकता है:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        // This Origin header you can see that in Network tab
        configuration.setAllowedOrigins(Arrays.asList("http:/url_1", "http:/url_2")); 
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        configuration.setAllowedHeaders(Arrays.asList("content-type"));
        configuration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()...
    }
}

विधि configure(HttpSecurity http) डिफ़ॉल्ट रूप से corsConfigurationSource का उपयोग http.cors() के लिए करेगी

10
Pavel 10 मई 2018, 23:40

यदि आप .NET Core का उपयोग कर रहे हैं, तो आपको Startup.CS में CORS को कॉन्फ़िगर करते समय .AllowCredentials() करना होगा।

कॉन्फ़िगर सेवाओं के अंदर

services.AddCors(o => {
    o.AddPolicy("AllowSetOrigins", options =>
    {
        options.WithOrigins("https://localhost:xxxx");
        options.AllowAnyHeader();
        options.AllowAnyMethod();
        options.AllowCredentials();
    });
});

services.AddMvc();

फिर कॉन्फ़िगर के अंदर:

app.UseCors("AllowSetOrigins");
app.UseMvc(routes =>
    {
        // Routing code here
    });

मेरे लिए, यह विशेष रूप से केवल विकल्प गायब था।AllowCredentials() जिसने आपके द्वारा उल्लिखित त्रुटि का कारण बना दिया। अन्य लोगों के लिए सामान्य रूप से एक साइड नोट के रूप में, जिनके पास CORS समस्याएँ हैं, ऑर्डर मायने रखता है और AddCors () आपके स्टार्टअप क्लास के अंदर AddMVC () से पहले पंजीकृत होना चाहिए।

4
Steven Pfeifer 30 अगस्त 2019, 02:10

यदि यह मदद करता है, तो मैं अपने रिएक्टज ऐप के साथ सेंट्रीफ्यूज का उपयोग कर रहा था, और, नीचे कुछ टिप्पणियों की जाँच करने के बाद, मैंने सेंट्रीफ्यूज.जेएस लाइब्रेरी फ़ाइल को देखा, जिसमें मेरे संस्करण में निम्नलिखित कोड स्निपेट था:

if ('withCredentials' in xhr) {
 xhr.withCredentials = true;
}

इन तीन पंक्तियों को हटाने के बाद, ऐप ने उम्मीद के मुताबिक ठीक काम किया।

आशा है कि इससे सहायता मिलेगी!

1
Gustavo Garcia 26 अक्टूबर 2018, 01:09