2013-05-14 7 views
6

के लिए CORS को कार्यान्वित करने का प्रयास करते समय मैं domainb.contoso.com पर स्थित वेब एप्लिकेशन से domainA.contoso.com पर स्थित listdata.svc (एक शेयरपॉइंट सेवा) तक पहुंचना चाहता हूं - प्रमाणीकरण एक समस्या प्रतीत होता है।401 SharePoint

एक JQuery अजाक्स कॉल के माध्यम से ListData.svc तक पहुंचने का प्रयास करते समय, CORS सक्षम के साथ, सर्वर 401 देता है। यदि मैं एक .htm पृष्ठ से एक ही क्वेरी चलाता हूं जिसे मैं SharePoint के अंदर से निष्पादित करता हूं, तो कॉल ठीक काम करता है, चूंकि डोमेन वही है।

शेयरपॉइंट एनटीएलएम का उपयोग अज्ञात प्रमाणीकरण के साथ बंद कर रहा है - मुझे लगता है कि 401 विंडोज़ क्रेडेंशियल का परिणाम है जो SharePoint सर्वर पर नहीं जा रहा है - लेकिन मुझे हेडर पर इन क्रेडेंशियल को सही तरीके से जोड़ने का नुकसान हुआ है। मैंने xhrFields सेट किया है: {withCredentials: true}, लेकिन यह प्रमाणीकरण समस्या को सही नहीं लगता है।

  • पहुंच-नियंत्रण-अनुमति दें-क्रेडेंशियल: सच
  • पहुंच-नियंत्रण-अनुमति दें-हेडर

    CORS सक्षम करने के लिए, मैं आईआईएस में SharePoint पर निम्न HTTP प्रतिक्रिया हेडर निर्धारित किया है: उत्पत्ति, सामग्री प्रकार, स्वीकार करें

  • पहुंच-नियंत्रण-अनुमति दें-मूल: *
  • पहुंच-नियंत्रण-अनुरोध-तरीके: पोस्ट, मिलता है, प्रमुख, विकल्प

आईआईएस में मेरे वेब एप्लिकेशन के लिए विंडोज प्रमाणीकरण सक्षम है, और मैंने आईआईएस में "OPTIONSVerbHandler" HTTP हैंडलर सेट नहीं किया है। इसे पढ़ने के लिए बारी करना एक फर्क नहीं पड़ता है।

JQuery अजाक्स कॉल (आवेदन से subdomainB.contoso.com पर):

$.ajax({ 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     url: listUrl, 
     xhrFields: { withCredentials: true }, 
     crossDomain:true, 
     processData: false, 
     async: true, 
     dataType: "json", 
     converters: { 
      // WCF Data Service .NET 3.5 incorrectly escapes singles quotes, which is clearly 
      // not required (and incorrect) in JSON specs. 
      // http://bugs.jquery.com/ticket/8320?cversion=0&cnum_hist=1 
      "text json": function (textValue) { 
       return jQuery.parseJSON(textValue.replace(/(^|[^\\])\\'/g, "$1'")); 
      } 
     }, 
     success: function (data, status, xhr) { 
      //successFunc(data.d.results); 
      alert("working!"); 
     }, 
     error: function (xhr, status, error) { 
      alert("failure!"); 
     } 
    }); 

HTTP हैडर और 401 उत्तर:

Key Value 
Request OPTIONS /_vti_bin/ListData.svc/Contacts HTTP/1.1 
Accept */* 
Origin http://domainB.contoso.com 
Access-Control-Request-Method GET 
Access-Control-Request-Headers content-type, accept 
Accept-Encoding gzip, deflate 
User-Agent Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0) 
Host domainA.contoso.com 
Content-Length 0 
DNT 1 
Connection Keep-Alive 
Cache-Control no-cache 

Key Value 
Response HTTP/1.1 401 Unauthorized 
Server Microsoft-IIS/7.5 
SPRequestGuid 1e33061c-f555-451b-9d69-0d83eff5f5ea 
WWW-Authenticate NTLM 
X-Powered-By ASP.NET 
MicrosoftSharePointTeamServices 14.0.0.4762 
Access-Control-Allow-Headers Origin, Content-Type, Accept 
Access-Control-Allow-Origin * 
Access-Control-Request-Methods POST, GET, HEAD, OPTIONS 
Access-Control-Allow-Credentials true 
Date Wed, 15 May 2013 15:04:51 GMT 
Content-Length 0 
+0

क्या आपने इसे http://sharepoint.stackexchange.com/ –

उत्तर

3

देर प्रतिक्रिया, लेकिन मुझे एक और धागा here मिला जो आईआईएस के लिए एक आसान समाधान है और जो मेरे लिए काम करता है।

असल में सीओआरएस मानक निर्दिष्ट करता है कि प्रीफलाइट अनुरोध को कोई प्रमाणीकरण जानकारी नहीं भेजनी चाहिए, इस प्रकार 401. उस धागे में अज्ञात अनुरोधों को विकल्प क्रियाओं को प्रतिबंधित करने का एक उदाहरण है जो प्रीफलाइट (विकल्प) क्रिया के 200 प्रतिक्रिया की अनुमति देता है) अनुरोध लेकिन अभी भी दूसरों के लिए प्रमाणीकरण की आवश्यकता है।

0

मुझे यकीन है कि तुम क्या मतलब है नहीं कर रहा हूँ द्वारा "अज्ञात प्रमाणीकरण अक्षम है", लेकिन ऐसा लगता है कि आपको 401 (Unauthorized) राहत मिल रही है onse। यह सीओआरएस से संबंधित नहीं है, लेकिन सर्वर क्लाइंट को बता रहा है कि इसे एक्सेस करने की अनुमति देने से पहले उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है।

$.ajax() करने के लिए एक उपयोगकर्ता नाम और पासवर्ड गुजर प्रयास करें (चेतावनी: यह सिर्फ है कि यदि आपकी समस्या का हल परीक्षण करने के लिए है, एक बुरा विचार आपके जे एस कोड में ऐसी जानकारी हार्डकोड है):

$.ajax({ 
    crossDomain:true,  
    url: listUrl, 
    username: VALID_USERNAME, 
    password: VALID_PASSWORD, 
    success: function(data){alert("hello json!") }, 
    error: function() { 
    alert("epic fail"); 
    }, 
    dataType:'json' 
}); 
+0

पर पोस्ट करने का प्रयास किया था अज्ञात औथ आईआईएस में बंद मोड में से एक है। आम तौर पर शेयरपॉइंट विंडोज एथ का उपयोग करता है। – Ray

+0

@ स्पष्टीकरण के लिए धन्यवाद धन्यवाद :) मुझे नहीं पता कि यह 'उपयोगकर्ता नाम'/'पासवर्ड' गुणों को' $ .ajax() 'में गुजरने से प्रभावित होता है। – robertklep

+0

मैंने प्रश्न अपडेट किया - उपयोगकर्ता नाम/पासवर्ड या क्रेडेंशियल के साथ, काम नहीं कर रहा है। – Ray

0

जब ग्राहक क्लाइंट के साथ "प्रमाण-पत्र: सत्य" भेजता है तो आप सर्वर पर एक्सेस-कंट्रोल-अनुमति-उत्पत्ति के लिए वाइल्डकार्ड (*) का उपयोग नहीं कर सकते।
आपको डोमेन को स्पष्ट रूप से सेट करना होगा।
CORS: Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true