कोर: क्रेडेंशियल्स मोड 'शामिल' है


100

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

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

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

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

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

यहां छवि विवरण दर्ज करें

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

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

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

सारंगी बजानेवाला

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

यहां छवि विवरण दर्ज करें

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

विधि 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);

}

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


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

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

मेरी टिप्पणी आप सभी को पता होना चाहिए - चित्रों को देखने की जरूरत नहीं थी
Jaromanda X

इसलिए हाल ही में मैंने अपनी वेब एपीआई पर कुकीज़ से दूर जाने का फैसला किया और टोकन का उपयोग किया। जब मैंने कुकीज़ का उपयोग किया, तो मेरे कॉर्स बिना किसी मुद्दे के काम करते हैं। इसलिए मैं यह समझने के लिए संघर्ष कर रहा हूं कि कैसे सर्वर की ओर से सही ढंग से कॉर्स को लागू नहीं किया गया है
रिचर्ड बेली

1
यदि आप प्रमाणीकरण शामिल करते हैं, तो access-control-allow-originप्रतिक्रिया मूल (ब्राउज़र पृष्ठ) होस्ट होनी चाहिए, यह नहीं हो सकती है*
Jaromanda X

जवाबों:


103

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

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

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

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

मैं इस सामान को इस लेख में समझाता हूं जो मैंने कुछ समय पहले लिखा था।

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


3
मैं टाइपस्क्रिप्ट के साथ कोणीय 5 अनुप्रयोग पर काम कर रहा हूं। मुझे सही के साथ क्रेडेंशियल्स देने की आवश्यकता है क्योंकि मुझे प्राधिकरण असफल अपवाद मिलेगा। सच: इस withCredentials हल करने के लिए कैसे
Ziggler

@Ziggler मेरी भी यही स्थिति थी। क्या आप समाधान ढूंढ रहे हैं?
पावेल

@Ziggler मैंने हल किया मेरा जवाब देखिए।
पावेल

1
WithCredentials = TRUE और Access-Control-Allow-Origin = [' localhost: 4200'] का उपयोग करते समय मुझे अभी भी यह त्रुटि मिल रही है , और मैं स्टार * का उपयोग नहीं कर रहा हूं, इसलिए त्रुटि संदेश का कोई मतलब नहीं है। त्रुटि संदेश: "पूर्व-अनुरोध अनुरोध का जवाब एक्सेस कंट्रोल चेक पास नहीं करता है: प्रतिक्रिया में 'एक्सेस-कंट्रोल-कंट्रोल-ऑरिजनल' हेडर का मूल्य वाइल्डकार्ड * नहीं होना चाहिए जब अनुरोध का क्रेडेंशियल मोड 'शामिल' हो। ' लोकलहोस्ट: 4200 ' को इसलिए उपयोग की अनुमति नहीं है। XMLHttpRequest द्वारा शुरू किए गए अनुरोधों की क्रेडेंशियल्स मोड को withCredentials विशेषता द्वारा नियंत्रित किया जाता है। "
मूरानोवा

@ ममरानोवा क्या आप सुनिश्चित हैं कि एक्सेस-कंट्रोल-अनुमति-उत्पत्ति हेडर अनुरोध में सही ढंग से सेट है? ऐसा लगता है कि कहीं वाइल्डकार्ड के साथ कुछ भेजा जाता है
geekonaut

14

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

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

`


11

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

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

constructor(public http: HttpClient) {
}

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

जावा सर्वर-साइड 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()


1

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

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

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

आशा करता हूँ की ये काम करेगा!


1

यदि आप .NET कोर का उपयोग कर रहे हैं, तो आपको 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
    });

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


0

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

app.use(cors(
  {origin: ['your client side server'],
  methods: ['GET', 'POST'],
  credentials:true,
}
))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.